AkshitShubham commited on
Commit
83058bd
·
verified ·
1 Parent(s): e7b89fb

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -1,35 +1,37 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz 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
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz 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
+ pwdlv3/bin/mp4decrypt filter=lfs diff=lfs merge=lfs -text
37
+ pwdlv3/bin/nm3 filter=lfs diff=lfs merge=lfs -text
Dockerfile ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.9
2
+
3
+ WORKDIR /code
4
+
5
+ COPY ./requirements.txt /code/requirements.txt
6
+
7
+ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
8
+
9
+ COPY . .
10
+
11
+ RUN ls -la
12
+
13
+ RUN chmod +x ./pwdlv3/bin/*
14
+
15
+ EXPOSE 8080
16
+
17
+ CMD ["python","app.py"]
18
+
README.md CHANGED
@@ -1,12 +1,11 @@
1
- ---
2
- title: PwdlBackendv2
3
- emoji: 🏃
4
- colorFrom: blue
5
- colorTo: indigo
6
- sdk: gradio
7
- sdk_version: 4.31.5
8
- app_file: app.py
9
- pinned: false
10
- ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ ---
2
+ title: PwdlBackendv2
3
+ emoji: 😻
4
+ colorFrom: blue
5
+ colorTo: indigo
6
+ sdk: docker
7
+ pinned: false
8
+ license: mit
9
+ ---
10
+
11
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
app.py ADDED
@@ -0,0 +1,341 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+ import subprocess
3
+
4
+ from flask import Flask, request, jsonify, send_file
5
+ from flask_socketio import SocketIO, emit
6
+ from flask_cors import CORS
7
+ from logger import Logger
8
+ from uuid import uuid4
9
+ import os
10
+
11
+ app = Flask(__name__)
12
+
13
+ logger = Logger('log.txt')
14
+
15
+ app.config['SECRET_KEY'] = 'secret!'
16
+ CORS(app, resources={r"/*": {"origins": "*"}})
17
+ socketio = SocketIO(app, cors_allowed_origins="*")
18
+
19
+
20
+
21
+ # clients is a 'list' of all connected clients
22
+ clients = []
23
+
24
+ SIMULATE = False
25
+ TEST = False
26
+
27
+ """
28
+ client_downloads is a 'dict'
29
+ with format as shown below
30
+ {
31
+ 'clientId':
32
+ {
33
+ 'downloadId':
34
+ [
35
+ [
36
+ ['fileName','id'],
37
+ 'done?'
38
+ ]
39
+ ]
40
+ }
41
+
42
+ downloadId is a unique id for each download (ref: downloadId in download.py)
43
+ downloadId is generated by the server as opposed to clientId which is generated by the client
44
+
45
+ in earlier versions of the server, downloadId was generated by the client
46
+ - these versions used static site, as opposed to the current version which uses 'react'
47
+
48
+ downloadId is further a list with a list of 2 elements
49
+ - first element is the list of fileName and id
50
+ - second element is a integer value
51
+ 0 -> download has been completed
52
+ 1 -> download is in progress
53
+ -1 -> download has been cancelled
54
+
55
+ """
56
+ client_downloads = {}
57
+
58
+
59
+ def shell(command, filter='.*', clientId='None', stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
60
+ universal_newlines=True):
61
+ import os, time
62
+
63
+ # Set PYTHONUNBUFFERED environment variable
64
+ os.environ['PYTHONUNBUFFERED'] = '1'
65
+
66
+ command = to_list(command)
67
+ count = 0
68
+ process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True,
69
+ shell=True)
70
+ output_list = []
71
+ # Read and print the output in real-time
72
+ while True:
73
+ output = process.stdout.readline()
74
+ if output == '' and process.poll() is not None:
75
+ break
76
+ if output and filter is not None and re.search(filter, output):
77
+ print(output.strip())
78
+
79
+ if output not in output_list:
80
+ socketio.emit(f'progress-{clientId}', {
81
+ 'message': output.strip(),
82
+ 'count': count
83
+ })
84
+ output_list.append(output.strip())
85
+ count += 1
86
+
87
+ # Wait for the process to complete and get the return code
88
+ return_code = process.poll()
89
+
90
+ return return_code
91
+
92
+
93
+ def to_list(variable):
94
+ if isinstance(variable, list):
95
+ return variable
96
+ elif variable is None:
97
+ return []
98
+ else:
99
+ # Convert to string and then to list by splitting at whitespaces
100
+ return variable.split()
101
+
102
+
103
+ def check_for_existing_running_downloads(clientId, downloadId=None):
104
+ # if dowbloadId is not provided, check if clientId exists in client_downloads
105
+ # and then check for any downloadId and if has a download
106
+
107
+ # Case 0: clientId is not in clients
108
+ if clientId not in clients:
109
+ return False
110
+
111
+ # Case 1: clientId is not in client_downloads
112
+ if clientId not in client_downloads:
113
+ return False
114
+
115
+ # Case 2: [Ideal] clientId provided and downloadId is provided
116
+ if downloadId:
117
+ downloads_of_client = client_downloads[clientId]
118
+
119
+ # Case 2.1: downloadId is not in client_downloads
120
+ if downloadId not in downloads_of_client:
121
+ return False
122
+
123
+ downloads_by_downloadId = downloads_of_client[downloadId]
124
+ for download in downloads_by_downloadId:
125
+ if download[1] == 1:
126
+ return downloadId
127
+
128
+ # Case 3: clientId provided but downloadId is not provided
129
+ for downloadId in client_downloads[clientId]:
130
+ downloads_by_downloadId = client_downloads[clientId][downloadId]
131
+ for download in downloads_by_downloadId:
132
+ if download[1] == 1:
133
+ return downloadId
134
+
135
+ # Case 4 : No downloads are running
136
+ return False
137
+
138
+
139
+ def send_existing_download_status(clientId):
140
+ emit(f'exists-running-downloads-{clientId}', {
141
+ 'message': 'Client has existing downloads',
142
+ 'names': [download[0][0] for download in
143
+ client_downloads[clientId][check_for_existing_running_downloads(clientId)]],
144
+ 'ids': [download[0][1] for download in
145
+ client_downloads[clientId][check_for_existing_running_downloads(clientId)]],
146
+ })
147
+
148
+
149
+ @socketio.on('connect')
150
+ def connect(data):
151
+ pass
152
+
153
+
154
+ @socketio.on('connect-with-client-Id')
155
+ def connect_with_client_id(data):
156
+ clientId = data['clientId']
157
+
158
+ if not clientId:
159
+ logger.logError(f'Empty CLient ID by {request.sid}')
160
+
161
+ if clientId not in clients:
162
+ logger.logInfo(f'Client {clientId} connected')
163
+ clients.append(clientId)
164
+
165
+ if not clientId in client_downloads:
166
+ client_downloads[clientId] = {
167
+
168
+ }
169
+
170
+ if check_for_existing_running_downloads(clientId):
171
+ logger.logInfo(f'Client {clientId} has existing downloads')
172
+ send_existing_download_status(clientId)
173
+ return # return as the client has an existing download
174
+
175
+
176
+ else:
177
+ logger.logInfo(f'Client {clientId} has no existing downloads')
178
+
179
+ emit(
180
+ f'successful-{clientId}',
181
+ {
182
+ 'connected': True
183
+ }
184
+ )
185
+
186
+
187
+ @socketio.on('test-pwdl')
188
+ def test_pwdl(data):
189
+ names = data['names']
190
+ ids = data['IDs']
191
+ clientId = data['clientId'] # Assuming you're passing the clientId from the client
192
+
193
+ existing_download_id = check_for_existing_running_downloads(clientId) # Check if there are any existing downloads
194
+
195
+ if existing_download_id:
196
+ download_id = existing_download_id
197
+
198
+ # normally this should not happen as the client should not be able to request a download
199
+ # and the existing download is checked when the client is connected
200
+ # so this is more of a fail-safe
201
+
202
+ # this means that the client has an existing download
203
+ # hence we emit the message to the client
204
+ send_existing_download_status(clientId)
205
+ return # return as the client has an existing download
206
+ else:
207
+ download_id = str(uuid4())
208
+ client_downloads[clientId] = {
209
+ download_id: []
210
+ }
211
+
212
+ # temporarily set the download id as '13cac2f0-e46f-465b-8a2c-71a043b05bd0'
213
+ if TEST:
214
+ download_id = '13cac2f0-e46f-465b-8a2c-71a043b05bd0'
215
+
216
+ logger.logInfo(f'Client {clientId} requested download')
217
+ logger.logInfo(f'Client {clientId} requested download with assigned downloadId {download_id}')
218
+
219
+ # the download path is ./webdl/<clientId>/<downloadId>
220
+ # make the directory
221
+ try:
222
+ os.makedirs(f'./webdl/{clientId}/{download_id}', exist_ok=True)
223
+ except Exception as e:
224
+ logger.logError(f'Error creating directory {e} for client {clientId} with downloadId {download_id} ')
225
+ print(e)
226
+ return
227
+
228
+
229
+
230
+ for name, id in zip(names, ids):
231
+
232
+ if TEST: break
233
+
234
+ # creates a new download in the client_downloads dict
235
+ client_downloads[clientId][download_id].append([[name, id], 1])
236
+
237
+ # currently just simulating download (no actual download)
238
+ # command is the pwdl command that downloads the video with the given id and name
239
+ command = ['python',
240
+ 'pwdlv3/pwdl.py',
241
+ '--id', id,
242
+ '--name', name,
243
+ '--dir', f'./webdl/{clientId}/{download_id}',
244
+ '--verbose']
245
+
246
+ if SIMULATE: command.append('--simulate')
247
+
248
+ # if simulate is turned on then create a simple txt file with format 'name.txt' in the download directory
249
+ if SIMULATE:
250
+ with open(f'./webdl/{clientId}/{download_id}/{name}.txt', 'w') as f:
251
+ f.write(f'This is a simulated file for {name}')
252
+
253
+ # start the download
254
+ socketio.emit(f'started-download-{clientId}', {
255
+ "name": name,
256
+ "id": id,
257
+ "downloadId": download_id
258
+ })
259
+
260
+ # execute the command (the shell command from
261
+ # 'https://github.com/shubhamakshit/EssentialPythonFunctions/blob/main/process.py' was edited for custom usage)
262
+
263
+ return_code_after_download = shell(command,
264
+ filter='.*',
265
+ clientId=clientId,
266
+ stdout=subprocess.PIPE,
267
+ stderr=subprocess.STDOUT,
268
+ universal_newlines=True)
269
+
270
+ print(f"Return code after download: {return_code_after_download}")
271
+ if return_code_after_download == 0:
272
+ # download has been completed
273
+ client_downloads[clientId][download_id][-1][1] = 0
274
+ socketio.emit(f'partial-complete-download-{clientId}', {
275
+ "name": name,
276
+ "id": id,
277
+ "downloadId": download_id
278
+ })
279
+ else:
280
+ # download has been cancelled
281
+ client_downloads[clientId][download_id][-1][1] = -1
282
+ socketio.emit(f'partial-cancel-download-{clientId}', {
283
+ "name": name,
284
+ "id": id,
285
+ "download_id": download_id
286
+ })
287
+
288
+ # log that downloads are complete with 'x' done and 'y' cancelled
289
+ done = []
290
+ cancelled = []
291
+
292
+ if not TEST:
293
+ for download in client_downloads[clientId][download_id]:
294
+ if download[1] == 0:
295
+ done.append(download[0][0] + (".txt" if SIMULATE else ".mp4") )
296
+ elif download[1] == -1:
297
+ cancelled.append(download[0][0])
298
+
299
+ logger.logInfo(f'Client {clientId} has completed {len(done) + 1} downloads and cancelled {len(cancelled) + 1} downloads')
300
+
301
+ # emit that the download has been completed (those not completed are cancelled)
302
+
303
+ if TEST:
304
+ done = ["1.mp4", "2.mp4"]
305
+
306
+ print(f'Download ID: {download_id}')
307
+
308
+ socketio.emit(f'download-complete-{clientId}', {
309
+ 'message': 'pwdl executed',
310
+ 'downloadId': download_id,
311
+ 'done': done,
312
+ 'cancelled': cancelled
313
+ })
314
+
315
+
316
+ @app.route('/get')
317
+ def get():
318
+
319
+ downloadId = request.args.get('downloadId')
320
+ clientId = request.args.get('clientId')
321
+ fileName = request.args.get('fileName')
322
+
323
+ print(f'DownloadId {downloadId}')
324
+
325
+ file_path = f'./webdl/{clientId}/{downloadId}/{fileName}'
326
+
327
+ response = send_file(file_path, as_attachment=True)
328
+ response.headers['Content-Length'] = os.path.getsize(file_path)
329
+
330
+ return response
331
+
332
+
333
+
334
+
335
+ @app.route('/')
336
+ def hello_world(): # put application's code here
337
+ return 'Hello World!'
338
+
339
+
340
+ if __name__ == '__main__':
341
+ socketio.run(app, port=8080)
log.txt ADDED
@@ -0,0 +1,764 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [INFO] @ [2024-05-10 15:02:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
2
+ [INFO] @ [2024-05-10 15:02:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
3
+ [INFO] @ [2024-05-10 15:02:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
4
+ [INFO] @ [2024-05-10 15:02:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 4ecd01be-379f-4f58-a644-970fb4723e83
5
+ [INFO] @ [2024-05-10 15:04:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
6
+ [INFO] @ [2024-05-10 15:04:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
7
+ [INFO] @ [2024-05-10 15:04:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
8
+ [INFO] @ [2024-05-10 15:04:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 69fb9046-8882-44ef-9aca-774af92305ec
9
+ [INFO] @ [2024-05-10 15:05:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
10
+ [INFO] @ [2024-05-10 15:05:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 108345aa-2f11-4f60-b474-4adaad28478d
11
+ [INFO] @ [2024-05-10 18:17:30] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
12
+ [INFO] @ [2024-05-10 18:17:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
13
+ [INFO] @ [2024-05-10 18:27:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
14
+ [INFO] @ [2024-05-10 18:27:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
15
+ [INFO] @ [2024-05-10 18:27:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
16
+ [INFO] @ [2024-05-10 18:28:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
17
+ [INFO] @ [2024-05-10 18:28:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
18
+ [INFO] @ [2024-05-10 18:29:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
19
+ [INFO] @ [2024-05-10 18:29:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
20
+ [INFO] @ [2024-05-10 18:29:30] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
21
+ [INFO] @ [2024-05-10 18:29:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
22
+ [INFO] @ [2024-05-10 18:29:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
23
+ [INFO] @ [2024-05-10 18:29:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 6aa1d57d-73d5-4832-b818-df0af6d2b7a4
24
+ [INFO] @ [2024-05-10 18:31:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
25
+ [INFO] @ [2024-05-10 18:31:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
26
+ [INFO] @ [2024-05-10 18:37:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
27
+ [INFO] @ [2024-05-10 18:37:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 3fb983ee-cedc-43f1-a252-a11d57288aea
28
+ [INFO] @ [2024-05-10 18:39:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
29
+ [INFO] @ [2024-05-10 18:39:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
30
+ [INFO] @ [2024-05-10 18:39:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
31
+ [INFO] @ [2024-05-10 18:39:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 8790dc44-68a0-431b-a17f-14c61f2e35a0
32
+ [INFO] @ [2024-05-10 18:39:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
33
+ [INFO] @ [2024-05-10 18:42:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
34
+ [INFO] @ [2024-05-10 18:42:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 50abedde-fe58-48e1-9d40-063c058b0abf
35
+ [INFO] @ [2024-05-10 18:42:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
36
+ [INFO] @ [2024-05-10 18:42:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
37
+ [INFO] @ [2024-05-10 18:42:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 3c1dba7a-1961-49aa-a6a2-caf67a3c81fc
38
+ [INFO] @ [2024-05-10 18:42:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
39
+ [INFO] @ [2024-05-10 18:43:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
40
+ [INFO] @ [2024-05-10 18:43:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
41
+ [INFO] @ [2024-05-10 18:43:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
42
+ [INFO] @ [2024-05-10 18:43:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
43
+ [INFO] @ [2024-05-10 18:44:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
44
+ [INFO] @ [2024-05-10 18:46:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
45
+ [INFO] @ [2024-05-10 18:46:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
46
+ [INFO] @ [2024-05-10 18:46:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
47
+ [INFO] @ [2024-05-10 18:46:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 46631fe3-f4a1-443a-b16f-9808ccb008ac
48
+ [INFO] @ [2024-05-10 18:46:20] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
49
+ [INFO] @ [2024-05-10 18:46:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
50
+ [INFO] @ [2024-05-10 18:48:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
51
+ [INFO] @ [2024-05-10 18:48:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
52
+ [INFO] @ [2024-05-10 18:48:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
53
+ [INFO] @ [2024-05-10 18:48:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 162b91fb-dba7-43d6-9c0c-2bb95be2b963
54
+ [INFO] @ [2024-05-10 18:48:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
55
+ [INFO] @ [2024-05-10 18:49:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
56
+ [INFO] @ [2024-05-10 18:49:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
57
+ [INFO] @ [2024-05-10 18:50:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
58
+ [INFO] @ [2024-05-10 18:50:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
59
+ [INFO] @ [2024-05-10 18:50:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 96e3322d-f89e-47e8-9cc2-f26d406f2cfb
60
+ [INFO] @ [2024-05-10 18:50:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
61
+ [INFO] @ [2024-05-10 19:00:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
62
+ [INFO] @ [2024-05-10 19:00:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
63
+ [INFO] @ [2024-05-10 19:00:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId a89650b7-4781-469e-abbd-9d4059e7ae60
64
+ [INFO] @ [2024-05-10 19:00:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
65
+ [INFO] @ [2024-05-10 19:00:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
66
+ [INFO] @ [2024-05-10 19:02:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
67
+ [INFO] @ [2024-05-10 19:02:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
68
+ [INFO] @ [2024-05-10 19:02:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
69
+ [INFO] @ [2024-05-10 19:02:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
70
+ [INFO] @ [2024-05-10 19:02:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 744c04d9-fd15-4900-8898-08123d012adf
71
+ [INFO] @ [2024-05-10 19:02:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
72
+ [INFO] @ [2024-05-10 19:02:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
73
+ [INFO] @ [2024-05-10 19:06:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
74
+ [INFO] @ [2024-05-10 19:06:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
75
+ [INFO] @ [2024-05-10 19:06:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
76
+ [INFO] @ [2024-05-10 19:06:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
77
+ [INFO] @ [2024-05-10 19:06:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
78
+ [INFO] @ [2024-05-10 19:06:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 292bc288-6757-44e2-880d-ab61fd0c67e7
79
+ [INFO] @ [2024-05-10 19:06:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
80
+ [INFO] @ [2024-05-10 19:06:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
81
+ [INFO] @ [2024-05-10 19:07:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
82
+ [INFO] @ [2024-05-10 19:07:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
83
+ [INFO] @ [2024-05-10 19:07:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
84
+ [INFO] @ [2024-05-10 19:07:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 93d4c6dc-8d44-45f1-bfb6-c004ca57a7cc
85
+ [INFO] @ [2024-05-10 19:07:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
86
+ [INFO] @ [2024-05-10 19:18:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
87
+ [INFO] @ [2024-05-10 19:18:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
88
+ [INFO] @ [2024-05-10 19:18:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId f620a1d4-09a2-485b-9247-8cf293538fdc
89
+ [INFO] @ [2024-05-10 19:18:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
90
+ [INFO] @ [2024-05-10 19:18:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
91
+ [INFO] @ [2024-05-10 19:18:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
92
+ [INFO] @ [2024-05-10 19:18:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
93
+ [INFO] @ [2024-05-10 19:18:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
94
+ [INFO] @ [2024-05-10 19:18:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 6e4718c7-0bd6-4839-844c-474415a7ec1e
95
+ [INFO] @ [2024-05-10 19:18:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
96
+ [INFO] @ [2024-05-10 19:18:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
97
+ [INFO] @ [2024-05-10 19:18:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
98
+ [INFO] @ [2024-05-10 19:18:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
99
+ [INFO] @ [2024-05-10 19:18:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 6d8b1c9f-0150-4353-b24a-3ca26813193f
100
+ [INFO] @ [2024-05-10 19:18:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
101
+ [INFO] @ [2024-05-10 19:19:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
102
+ [INFO] @ [2024-05-10 19:19:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
103
+ [INFO] @ [2024-05-10 19:19:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
104
+ [INFO] @ [2024-05-10 19:19:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 1244a8fa-31b1-42eb-ac70-3c2ae4e833a4
105
+ [INFO] @ [2024-05-10 19:20:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
106
+ [INFO] @ [2024-05-10 19:20:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
107
+ [INFO] @ [2024-05-10 19:21:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
108
+ [INFO] @ [2024-05-10 19:21:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
109
+ [INFO] @ [2024-05-10 19:22:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
110
+ [INFO] @ [2024-05-10 19:22:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId a9d03674-fa73-459c-bc3c-4885c3c4b2e0
111
+ [INFO] @ [2024-05-10 19:22:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
112
+ [INFO] @ [2024-05-10 19:22:20] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
113
+ [INFO] @ [2024-05-10 19:24:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
114
+ [INFO] @ [2024-05-10 19:24:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
115
+ [INFO] @ [2024-05-10 19:24:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 6b6bcf19-2a94-464c-8bff-b9114a410ba4
116
+ [INFO] @ [2024-05-10 19:24:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
117
+ [INFO] @ [2024-05-10 19:24:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
118
+ [INFO] @ [2024-05-10 22:06:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
119
+ [INFO] @ [2024-05-10 22:28:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
120
+ [INFO] @ [2024-05-10 22:28:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
121
+ [INFO] @ [2024-05-10 22:28:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 2edcfcc7-4374-48c6-b973-c293577cb297
122
+ [INFO] @ [2024-05-10 22:28:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
123
+ [INFO] @ [2024-05-10 22:28:20] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
124
+ [INFO] @ [2024-05-10 22:33:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
125
+ [INFO] @ [2024-05-10 22:33:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
126
+ [INFO] @ [2024-05-10 22:33:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
127
+ [INFO] @ [2024-05-10 22:33:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
128
+ [INFO] @ [2024-05-10 22:33:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
129
+ [INFO] @ [2024-05-10 22:33:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId cb8b7c35-815c-4d6f-acc3-d5d9a493074b
130
+ [INFO] @ [2024-05-10 22:33:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
131
+ [INFO] @ [2024-05-10 22:33:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
132
+ [INFO] @ [2024-05-10 22:34:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
133
+ [INFO] @ [2024-05-10 22:34:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
134
+ [INFO] @ [2024-05-10 22:36:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
135
+ [INFO] @ [2024-05-10 22:36:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 615dbda6-3b8c-4e2f-8558-f10bfe0dfe5b
136
+ [INFO] @ [2024-05-10 22:36:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
137
+ [INFO] @ [2024-05-10 22:36:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
138
+ [INFO] @ [2024-05-10 22:36:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 725d5d34-574c-4a95-88ac-c235f4931bd3
139
+ [INFO] @ [2024-05-10 22:36:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
140
+ [INFO] @ [2024-05-10 22:36:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
141
+ [INFO] @ [2024-05-10 22:36:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 5c4fe03f-1723-495a-9d0a-20c35c4cd2c1
142
+ [INFO] @ [2024-05-10 22:36:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
143
+ [INFO] @ [2024-05-10 22:36:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
144
+ [INFO] @ [2024-05-10 22:36:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 3b98ecc5-0f1b-4ba0-a1d6-b475d4819290
145
+ [INFO] @ [2024-05-10 22:36:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
146
+ [INFO] @ [2024-05-10 22:36:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
147
+ [INFO] @ [2024-05-10 22:36:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 531794d0-92d1-45ae-b172-63913e8166f6
148
+ [INFO] @ [2024-05-10 22:36:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
149
+ [INFO] @ [2024-05-10 22:37:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
150
+ [INFO] @ [2024-05-10 22:37:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 7cfe9749-eb43-449c-9219-a47d48e55aea
151
+ [INFO] @ [2024-05-10 22:37:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
152
+ [INFO] @ [2024-05-10 22:38:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
153
+ [INFO] @ [2024-05-10 22:38:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 1707e762-81d2-40d1-a803-10af08ef6284
154
+ [INFO] @ [2024-05-10 22:38:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
155
+ [INFO] @ [2024-05-10 22:38:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
156
+ [INFO] @ [2024-05-10 22:38:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
157
+ [INFO] @ [2024-05-10 22:38:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
158
+ [INFO] @ [2024-05-10 22:39:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
159
+ [INFO] @ [2024-05-10 22:39:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
160
+ [INFO] @ [2024-05-10 22:41:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
161
+ [INFO] @ [2024-05-10 22:41:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
162
+ [INFO] @ [2024-05-10 22:41:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
163
+ [INFO] @ [2024-05-10 22:41:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 70054a19-711c-4083-a645-e6761d8b560a
164
+ [INFO] @ [2024-05-10 22:41:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
165
+ [INFO] @ [2024-05-10 22:41:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
166
+ [INFO] @ [2024-05-10 22:41:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
167
+ [INFO] @ [2024-05-10 22:42:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
168
+ [INFO] @ [2024-05-10 22:42:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
169
+ [INFO] @ [2024-05-10 22:42:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
170
+ [INFO] @ [2024-05-10 22:42:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
171
+ [INFO] @ [2024-05-10 22:42:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 614d1f92-c9ab-41a2-be8a-208aecc84da8
172
+ [INFO] @ [2024-05-10 22:42:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
173
+ [INFO] @ [2024-05-10 22:42:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
174
+ [INFO] @ [2024-05-10 22:42:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 421ef40e-c590-4729-8713-f0a29d0a96f2
175
+ [INFO] @ [2024-05-10 22:42:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
176
+ [INFO] @ [2024-05-10 22:43:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
177
+ [INFO] @ [2024-05-10 22:43:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
178
+ [INFO] @ [2024-05-10 22:43:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 9e005fee-2771-4668-a561-08f8936f8770
179
+ [INFO] @ [2024-05-10 22:43:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
180
+ [INFO] @ [2024-05-10 22:43:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
181
+ [INFO] @ [2024-05-10 22:43:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId a10aa921-d6f8-44ea-a5e9-5ae97593585f
182
+ [INFO] @ [2024-05-10 22:43:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
183
+ [INFO] @ [2024-05-10 22:43:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
184
+ [INFO] @ [2024-05-10 22:43:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
185
+ [INFO] @ [2024-05-10 22:43:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId a361a160-aaf7-4ec2-855a-aab3c204c9ff
186
+ [INFO] @ [2024-05-10 22:43:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
187
+ [INFO] @ [2024-05-10 22:44:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
188
+ [INFO] @ [2024-05-10 22:44:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
189
+ [INFO] @ [2024-05-10 22:44:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
190
+ [INFO] @ [2024-05-10 22:44:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 1ae17fa9-35f4-4f5d-830b-15a8a4c040d2
191
+ [INFO] @ [2024-05-10 22:44:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
192
+ [INFO] @ [2024-05-10 22:45:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
193
+ [INFO] @ [2024-05-10 22:45:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
194
+ [INFO] @ [2024-05-10 22:45:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
195
+ [INFO] @ [2024-05-10 22:45:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 23b308f9-be1c-44cc-b5c7-8edc3b61de1b
196
+ [INFO] @ [2024-05-10 22:45:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
197
+ [INFO] @ [2024-05-10 22:46:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
198
+ [INFO] @ [2024-05-10 22:46:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
199
+ [INFO] @ [2024-05-10 22:46:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
200
+ [INFO] @ [2024-05-10 22:46:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
201
+ [INFO] @ [2024-05-10 22:46:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 2b45a360-a4da-41e5-8552-00790750cbbc
202
+ [INFO] @ [2024-05-10 22:46:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
203
+ [INFO] @ [2024-05-10 22:50:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
204
+ [INFO] @ [2024-05-10 22:50:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
205
+ [INFO] @ [2024-05-10 22:51:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
206
+ [INFO] @ [2024-05-10 22:51:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
207
+ [INFO] @ [2024-05-10 22:51:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
208
+ [INFO] @ [2024-05-10 22:51:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
209
+ [INFO] @ [2024-05-10 22:51:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId e370524e-6360-4691-a367-b94aab131301
210
+ [INFO] @ [2024-05-10 22:51:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
211
+ [INFO] @ [2024-05-10 22:52:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
212
+ [INFO] @ [2024-05-10 22:52:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
213
+ [INFO] @ [2024-05-10 22:52:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
214
+ [INFO] @ [2024-05-10 22:52:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId d42120de-2cb9-4eea-8874-38d21d9d25e1
215
+ [INFO] @ [2024-05-10 22:52:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
216
+ [INFO] @ [2024-05-10 22:52:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
217
+ [INFO] @ [2024-05-10 22:54:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
218
+ [INFO] @ [2024-05-10 22:54:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
219
+ [INFO] @ [2024-05-10 22:54:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
220
+ [INFO] @ [2024-05-10 22:54:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId c346e9aa-d592-4714-806e-ccc45b432bac
221
+ [INFO] @ [2024-05-10 22:54:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 0 downloads
222
+ [INFO] @ [2024-05-10 22:54:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
223
+ [INFO] @ [2024-05-10 22:54:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
224
+ [INFO] @ [2024-05-10 22:54:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
225
+ [INFO] @ [2024-05-10 22:54:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 11eb6ced-f29b-46dc-a7c0-517e76aa9365
226
+ [INFO] @ [2024-05-10 22:54:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
227
+ [INFO] @ [2024-05-10 22:54:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
228
+ [INFO] @ [2024-05-10 22:54:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
229
+ [INFO] @ [2024-05-10 22:54:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
230
+ [INFO] @ [2024-05-10 22:55:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
231
+ [INFO] @ [2024-05-10 22:55:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
232
+ [INFO] @ [2024-05-10 22:55:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 10997990-6f47-49c9-acf8-62aca92fab1c
233
+ [INFO] @ [2024-05-10 22:55:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
234
+ [INFO] @ [2024-05-10 22:55:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
235
+ [INFO] @ [2024-05-10 22:56:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
236
+ [INFO] @ [2024-05-10 22:56:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
237
+ [INFO] @ [2024-05-10 22:56:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
238
+ [INFO] @ [2024-05-10 22:56:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
239
+ [INFO] @ [2024-05-10 22:56:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 50e39df9-eb20-48ed-86e7-a5b26ae5a472
240
+ [INFO] @ [2024-05-10 22:56:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
241
+ [INFO] @ [2024-05-10 22:57:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
242
+ [INFO] @ [2024-05-10 22:57:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
243
+ [INFO] @ [2024-05-10 22:57:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
244
+ [INFO] @ [2024-05-10 22:57:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 8b638497-0f1b-49b5-8cee-d70482543833
245
+ [INFO] @ [2024-05-10 22:57:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
246
+ [INFO] @ [2024-05-10 22:57:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
247
+ [INFO] @ [2024-05-10 22:57:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
248
+ [INFO] @ [2024-05-10 22:57:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
249
+ [INFO] @ [2024-05-10 22:57:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
250
+ [INFO] @ [2024-05-10 22:57:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
251
+ [INFO] @ [2024-05-10 22:58:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
252
+ [INFO] @ [2024-05-10 22:58:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0f8591d7-3ca3-45d1-8e75-6f0661604d3c
253
+ [INFO] @ [2024-05-10 22:58:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 0 downloads and cancelled 1 downloads
254
+ [INFO] @ [2024-05-10 22:58:51] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
255
+ [INFO] @ [2024-05-10 22:58:51] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
256
+ [INFO] @ [2024-05-10 22:59:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
257
+ [INFO] @ [2024-05-10 22:59:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
258
+ [INFO] @ [2024-05-10 22:59:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
259
+ [INFO] @ [2024-05-10 22:59:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 2f4c48ff-e61f-4f8d-a1e9-d6214ad1ef11
260
+ [INFO] @ [2024-05-10 22:59:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
261
+ [INFO] @ [2024-05-10 22:59:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
262
+ [INFO] @ [2024-05-10 22:59:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
263
+ [INFO] @ [2024-05-10 22:59:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0b4af807-2fd0-4425-810d-b4d1b8413833
264
+ [INFO] @ [2024-05-10 23:00:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
265
+ [INFO] @ [2024-05-10 23:00:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
266
+ [INFO] @ [2024-05-10 23:01:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
267
+ [INFO] @ [2024-05-10 23:01:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
268
+ [INFO] @ [2024-05-10 23:01:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId fb809622-2508-4ea8-8cf5-7314bcb21561
269
+ [INFO] @ [2024-05-10 23:01:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 0 downloads
270
+ [INFO] @ [2024-05-10 23:02:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
271
+ [INFO] @ [2024-05-10 23:05:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
272
+ [INFO] @ [2024-05-10 23:05:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 68faf3de-2292-40e4-b1ca-5368e2ebee63
273
+ [INFO] @ [2024-05-10 23:05:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
274
+ [INFO] @ [2024-05-10 23:05:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
275
+ [INFO] @ [2024-05-10 23:05:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 85301f03-1944-47fb-8b4c-0d7feb7cea8b
276
+ [INFO] @ [2024-05-10 23:05:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
277
+ [INFO] @ [2024-05-10 23:07:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
278
+ [INFO] @ [2024-05-10 23:07:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
279
+ [INFO] @ [2024-05-10 23:07:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
280
+ [INFO] @ [2024-05-10 23:07:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 295970b1-37e2-4c7e-9b79-87472b080fa1
281
+ [INFO] @ [2024-05-10 23:07:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
282
+ [INFO] @ [2024-05-10 23:08:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
283
+ [INFO] @ [2024-05-10 23:08:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
284
+ [INFO] @ [2024-05-10 23:09:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
285
+ [INFO] @ [2024-05-10 23:09:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
286
+ [INFO] @ [2024-05-10 23:09:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
287
+ [INFO] @ [2024-05-10 23:09:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 581a749f-0238-4e88-a652-9d7208bba542
288
+ [INFO] @ [2024-05-10 23:09:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
289
+ [INFO] @ [2024-05-10 23:09:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
290
+ [INFO] @ [2024-05-10 23:09:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
291
+ [INFO] @ [2024-05-10 23:09:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
292
+ [INFO] @ [2024-05-10 23:09:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 7acd6c40-9459-43bd-a6a7-7e8692cf87cb
293
+ [INFO] @ [2024-05-10 23:09:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
294
+ [INFO] @ [2024-05-10 23:14:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
295
+ [INFO] @ [2024-05-10 23:14:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
296
+ [INFO] @ [2024-05-10 23:15:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
297
+ [INFO] @ [2024-05-10 23:15:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
298
+ [INFO] @ [2024-05-10 23:15:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
299
+ [INFO] @ [2024-05-10 23:15:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 4a7e74e1-9784-4777-8fdc-d52d4c4eabcd
300
+ [INFO] @ [2024-05-10 23:15:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
301
+ [INFO] @ [2024-05-10 23:16:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
302
+ [INFO] @ [2024-05-10 23:16:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
303
+ [INFO] @ [2024-05-10 23:16:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
304
+ [INFO] @ [2024-05-10 23:16:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
305
+ [INFO] @ [2024-05-10 23:16:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 92966ef4-60fd-4288-96c0-0cdfbe38cb94
306
+ [INFO] @ [2024-05-10 23:16:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
307
+ [INFO] @ [2024-05-10 23:16:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
308
+ [INFO] @ [2024-05-10 23:16:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
309
+ [INFO] @ [2024-05-10 23:17:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
310
+ [INFO] @ [2024-05-10 23:17:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
311
+ [INFO] @ [2024-05-10 23:17:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
312
+ [INFO] @ [2024-05-10 23:17:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
313
+ [INFO] @ [2024-05-10 23:17:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId f7e68324-4397-4859-89ae-aa3c383b83cd
314
+ [INFO] @ [2024-05-10 23:17:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
315
+ [INFO] @ [2024-05-10 23:17:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
316
+ [INFO] @ [2024-05-10 23:17:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 220e61e2-8959-4c25-be0b-d0d3f19a716a
317
+ [INFO] @ [2024-05-10 23:17:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
318
+ [INFO] @ [2024-05-10 23:17:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
319
+ [INFO] @ [2024-05-10 23:18:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
320
+ [INFO] @ [2024-05-10 23:18:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
321
+ [INFO] @ [2024-05-10 23:18:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
322
+ [INFO] @ [2024-05-10 23:18:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
323
+ [INFO] @ [2024-05-10 23:18:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 91298ecc-a3b2-483d-967c-666a4f041ab7
324
+ [INFO] @ [2024-05-10 23:18:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
325
+ [INFO] @ [2024-05-10 23:21:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
326
+ [INFO] @ [2024-05-10 23:21:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
327
+ [INFO] @ [2024-05-10 23:21:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
328
+ [INFO] @ [2024-05-10 23:21:20] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
329
+ [INFO] @ [2024-05-10 23:21:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
330
+ [INFO] @ [2024-05-10 23:21:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
331
+ [INFO] @ [2024-05-10 23:21:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 42b0fdf1-6ee9-4993-a867-4ae47f5a72ca
332
+ [INFO] @ [2024-05-10 23:21:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
333
+ [INFO] @ [2024-05-10 23:21:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
334
+ [INFO] @ [2024-05-10 23:22:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
335
+ [INFO] @ [2024-05-10 23:22:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0e3729b9-f821-402f-bacf-c0489d285046
336
+ [INFO] @ [2024-05-10 23:22:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
337
+ [INFO] @ [2024-05-10 23:23:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
338
+ [INFO] @ [2024-05-10 23:24:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
339
+ [INFO] @ [2024-05-10 23:24:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
340
+ [INFO] @ [2024-05-10 23:24:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
341
+ [INFO] @ [2024-05-10 23:24:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
342
+ [INFO] @ [2024-05-10 23:24:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
343
+ [INFO] @ [2024-05-10 23:24:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
344
+ [INFO] @ [2024-05-10 23:24:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 74ce6888-f2ee-40a0-ab92-e0fdb4112d92
345
+ [INFO] @ [2024-05-10 23:25:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
346
+ [INFO] @ [2024-05-11 00:49:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
347
+ [INFO] @ [2024-05-11 00:49:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
348
+ [INFO] @ [2024-05-11 16:53:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
349
+ [INFO] @ [2024-05-11 16:53:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
350
+ [INFO] @ [2024-05-11 17:22:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
351
+ [INFO] @ [2024-05-11 17:22:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
352
+ [INFO] @ [2024-05-11 17:22:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
353
+ [INFO] @ [2024-05-11 17:22:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
354
+ [INFO] @ [2024-05-11 17:22:28] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 65e879a4-5d0b-4f34-b52d-aaf6df06d5a1
355
+ [INFO] @ [2024-05-11 17:22:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
356
+ [INFO] @ [2024-05-11 17:23:14] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
357
+ [INFO] @ [2024-05-11 17:23:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
358
+ [INFO] @ [2024-05-11 17:23:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
359
+ [INFO] @ [2024-05-11 17:23:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 736dd19f-2013-451d-a8cf-4f0594208276
360
+ [INFO] @ [2024-05-11 17:23:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
361
+ [INFO] @ [2024-05-11 17:23:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
362
+ [INFO] @ [2024-05-11 17:24:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
363
+ [INFO] @ [2024-05-11 17:24:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
364
+ [INFO] @ [2024-05-11 17:24:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
365
+ [INFO] @ [2024-05-11 17:24:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
366
+ [INFO] @ [2024-05-11 17:24:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId df1cc9a3-b7e0-43ad-95fa-8a071968e061
367
+ [INFO] @ [2024-05-11 17:24:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
368
+ [INFO] @ [2024-05-11 17:25:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
369
+ [INFO] @ [2024-05-11 17:26:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
370
+ [INFO] @ [2024-05-11 17:26:54] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
371
+ [INFO] @ [2024-05-11 17:26:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
372
+ [INFO] @ [2024-05-11 17:26:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 948a58eb-06bb-42e3-8076-e78cb6c8d30e
373
+ [INFO] @ [2024-05-11 17:27:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
374
+ [INFO] @ [2024-05-11 17:32:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
375
+ [INFO] @ [2024-05-11 17:32:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
376
+ [INFO] @ [2024-05-11 17:32:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
377
+ [INFO] @ [2024-05-11 17:32:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
378
+ [INFO] @ [2024-05-11 17:32:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
379
+ [INFO] @ [2024-05-11 17:32:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 3b8c3898-275f-4cba-874e-8d0ecff2b063
380
+ [INFO] @ [2024-05-11 17:32:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
381
+ [INFO] @ [2024-05-11 17:32:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
382
+ [INFO] @ [2024-05-11 17:32:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
383
+ [INFO] @ [2024-05-11 17:32:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
384
+ [INFO] @ [2024-05-11 17:32:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
385
+ [INFO] @ [2024-05-11 17:33:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
386
+ [INFO] @ [2024-05-11 17:33:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
387
+ [INFO] @ [2024-05-11 17:33:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
388
+ [INFO] @ [2024-05-11 17:33:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
389
+ [INFO] @ [2024-05-11 17:33:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
390
+ [INFO] @ [2024-05-11 17:33:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
391
+ [INFO] @ [2024-05-11 17:33:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
392
+ [INFO] @ [2024-05-11 17:33:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
393
+ [INFO] @ [2024-05-11 17:33:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
394
+ [INFO] @ [2024-05-11 17:33:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
395
+ [INFO] @ [2024-05-11 17:33:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
396
+ [INFO] @ [2024-05-11 17:34:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
397
+ [INFO] @ [2024-05-11 17:34:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 65944970-a8a0-4c37-801b-efa36184b2f2
398
+ [INFO] @ [2024-05-11 17:34:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
399
+ [INFO] @ [2024-05-11 17:34:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
400
+ [INFO] @ [2024-05-11 17:34:30] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
401
+ [INFO] @ [2024-05-11 17:34:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
402
+ [INFO] @ [2024-05-11 17:34:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 4d0ebad7-015c-4b60-89d5-724e59ff4bae
403
+ [INFO] @ [2024-05-11 17:34:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
404
+ [INFO] @ [2024-05-11 17:34:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
405
+ [INFO] @ [2024-05-11 17:34:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
406
+ [INFO] @ [2024-05-11 17:34:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
407
+ [INFO] @ [2024-05-11 17:35:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
408
+ [INFO] @ [2024-05-11 17:35:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
409
+ [INFO] @ [2024-05-11 17:35:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 1371615e-69a4-4cea-84ca-e92b8e0a7f20
410
+ [INFO] @ [2024-05-11 17:35:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
411
+ [INFO] @ [2024-05-11 17:35:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
412
+ [INFO] @ [2024-05-11 17:36:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
413
+ [INFO] @ [2024-05-11 17:36:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
414
+ [INFO] @ [2024-05-11 17:36:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
415
+ [INFO] @ [2024-05-11 17:36:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
416
+ [INFO] @ [2024-05-11 17:36:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 95f49ddb-852b-4fda-bed5-c3d7f7db016e
417
+ [INFO] @ [2024-05-11 17:37:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
418
+ [INFO] @ [2024-05-11 17:41:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
419
+ [INFO] @ [2024-05-11 17:41:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
420
+ [INFO] @ [2024-05-11 17:41:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
421
+ [INFO] @ [2024-05-11 17:41:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
422
+ [INFO] @ [2024-05-11 17:41:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
423
+ [INFO] @ [2024-05-11 17:41:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
424
+ [INFO] @ [2024-05-11 17:41:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
425
+ [INFO] @ [2024-05-11 17:41:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
426
+ [INFO] @ [2024-05-11 17:41:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 3ca11900-7b3f-4630-881e-a56ef4749542
427
+ [INFO] @ [2024-05-11 17:41:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
428
+ [INFO] @ [2024-05-11 17:42:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
429
+ [INFO] @ [2024-05-11 17:42:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
430
+ [INFO] @ [2024-05-11 17:42:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
431
+ [INFO] @ [2024-05-11 17:43:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
432
+ [INFO] @ [2024-05-11 17:43:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 17e76d07-5642-4cc7-899b-ba93a8d66a4a
433
+ [INFO] @ [2024-05-11 17:43:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
434
+ [INFO] @ [2024-05-11 17:45:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
435
+ [INFO] @ [2024-05-11 17:45:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
436
+ [INFO] @ [2024-05-11 17:45:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
437
+ [INFO] @ [2024-05-11 17:45:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId d5c1df6d-a629-4268-9889-734cb991c1d7
438
+ [INFO] @ [2024-05-11 17:45:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
439
+ [INFO] @ [2024-05-11 17:46:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
440
+ [INFO] @ [2024-05-11 17:46:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
441
+ [INFO] @ [2024-05-11 17:46:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
442
+ [INFO] @ [2024-05-11 17:46:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
443
+ [INFO] @ [2024-05-11 17:46:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
444
+ [INFO] @ [2024-05-11 17:46:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId d961b7aa-8411-4dda-a506-4a28bfa0c6cd
445
+ [INFO] @ [2024-05-11 17:46:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
446
+ [INFO] @ [2024-05-11 17:46:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
447
+ [INFO] @ [2024-05-11 17:47:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
448
+ [INFO] @ [2024-05-11 17:47:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
449
+ [INFO] @ [2024-05-11 17:50:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
450
+ [INFO] @ [2024-05-11 17:50:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
451
+ [INFO] @ [2024-05-11 17:50:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
452
+ [INFO] @ [2024-05-11 17:50:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
453
+ [INFO] @ [2024-05-11 17:50:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
454
+ [INFO] @ [2024-05-11 17:50:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId a754b37c-0349-4bd6-a159-d472ecea8336
455
+ [INFO] @ [2024-05-11 17:50:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
456
+ [INFO] @ [2024-05-11 17:51:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
457
+ [INFO] @ [2024-05-11 17:51:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
458
+ [INFO] @ [2024-05-11 17:51:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
459
+ [INFO] @ [2024-05-11 17:51:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
460
+ [INFO] @ [2024-05-11 17:51:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
461
+ [INFO] @ [2024-05-11 17:51:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 78f632ff-5cec-49d9-bccc-002367669ec3
462
+ [INFO] @ [2024-05-11 17:51:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
463
+ [INFO] @ [2024-05-11 17:53:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
464
+ [INFO] @ [2024-05-11 17:53:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
465
+ [INFO] @ [2024-05-11 17:53:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
466
+ [INFO] @ [2024-05-11 17:53:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 71149c5f-a060-47c0-bb57-bcb04083e56b
467
+ [INFO] @ [2024-05-11 17:53:14] Client cec2e462-f029-4167-bae6-0425915abcbf connected
468
+ [INFO] @ [2024-05-11 17:53:14] Client cec2e462-f029-4167-bae6-0425915abcbf has no existing downloads
469
+ [INFO] @ [2024-05-11 17:53:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
470
+ [INFO] @ [2024-05-11 17:53:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
471
+ [INFO] @ [2024-05-11 17:53:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
472
+ [INFO] @ [2024-05-11 17:53:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
473
+ [INFO] @ [2024-05-11 17:53:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 28bbd170-1d10-499e-bbd8-6ad880c65109
474
+ [INFO] @ [2024-05-11 17:53:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
475
+ [INFO] @ [2024-05-11 17:54:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
476
+ [INFO] @ [2024-05-11 18:01:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
477
+ [INFO] @ [2024-05-11 18:01:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
478
+ [INFO] @ [2024-05-11 18:01:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0ad3caa7-b47b-43f7-bc67-402e4d9e438e
479
+ [INFO] @ [2024-05-11 18:01:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
480
+ [INFO] @ [2024-05-11 18:10:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
481
+ [INFO] @ [2024-05-11 18:10:09] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
482
+ [INFO] @ [2024-05-11 18:10:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
483
+ [INFO] @ [2024-05-11 18:10:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 9ab2d1b3-6bfb-4b09-af71-5c2c1d73d127
484
+ [INFO] @ [2024-05-11 18:10:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
485
+ [INFO] @ [2024-05-11 18:10:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
486
+ [INFO] @ [2024-05-11 18:10:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId ef9e8336-f6b7-47ce-b02a-011b229e4f16
487
+ [INFO] @ [2024-05-11 18:10:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
488
+ [INFO] @ [2024-05-11 18:26:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
489
+ [INFO] @ [2024-05-11 18:26:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
490
+ [INFO] @ [2024-05-11 18:28:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
491
+ [INFO] @ [2024-05-11 18:28:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
492
+ [INFO] @ [2024-05-11 18:28:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
493
+ [INFO] @ [2024-05-11 18:28:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
494
+ [INFO] @ [2024-05-11 18:28:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId eff3ab58-be5a-4915-916a-5f364516ac22
495
+ [INFO] @ [2024-05-11 18:28:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
496
+ [INFO] @ [2024-05-11 18:51:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
497
+ [INFO] @ [2024-05-11 18:51:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
498
+ [INFO] @ [2024-05-11 18:51:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
499
+ [INFO] @ [2024-05-11 18:51:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
500
+ [INFO] @ [2024-05-11 18:51:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 58b4ac76-4dd0-4259-bdae-5f1178911e39
501
+ [INFO] @ [2024-05-11 18:52:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
502
+ [INFO] @ [2024-05-11 18:52:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
503
+ [INFO] @ [2024-05-11 18:53:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
504
+ [INFO] @ [2024-05-11 18:53:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
505
+ [INFO] @ [2024-05-11 18:53:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
506
+ [INFO] @ [2024-05-11 18:53:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
507
+ [INFO] @ [2024-05-11 18:53:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
508
+ [INFO] @ [2024-05-11 18:53:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
509
+ [INFO] @ [2024-05-11 18:53:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
510
+ [INFO] @ [2024-05-11 18:53:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId c729b925-a09a-4293-85c3-135ac08f1816
511
+ [INFO] @ [2024-05-11 18:53:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
512
+ [INFO] @ [2024-05-11 18:55:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
513
+ [INFO] @ [2024-05-11 18:55:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
514
+ [INFO] @ [2024-05-11 18:55:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
515
+ [INFO] @ [2024-05-11 18:55:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
516
+ [INFO] @ [2024-05-11 18:55:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
517
+ [INFO] @ [2024-05-11 18:55:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0a9dcf7c-6e17-4dc8-b10b-2bb7e173a508
518
+ [INFO] @ [2024-05-11 18:56:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
519
+ [INFO] @ [2024-05-11 18:56:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
520
+ [INFO] @ [2024-05-11 18:56:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
521
+ [INFO] @ [2024-05-11 18:56:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
522
+ [INFO] @ [2024-05-11 18:56:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
523
+ [INFO] @ [2024-05-11 18:56:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 86007f50-393c-4be5-8b61-a0433e6a5a66
524
+ [INFO] @ [2024-05-11 18:57:05] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
525
+ [INFO] @ [2024-05-11 18:57:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
526
+ [INFO] @ [2024-05-11 18:57:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
527
+ [INFO] @ [2024-05-11 18:57:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
528
+ [INFO] @ [2024-05-11 18:57:21] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
529
+ [INFO] @ [2024-05-11 18:57:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
530
+ [INFO] @ [2024-05-11 18:57:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
531
+ [INFO] @ [2024-05-11 18:57:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
532
+ [INFO] @ [2024-05-11 18:57:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
533
+ [INFO] @ [2024-05-11 18:57:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
534
+ [INFO] @ [2024-05-11 18:57:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 40997332-3bcb-4094-af3b-208dd8b3ad80
535
+ [INFO] @ [2024-05-11 18:57:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
536
+ [INFO] @ [2024-05-11 18:58:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
537
+ [INFO] @ [2024-05-11 18:58:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
538
+ [INFO] @ [2024-05-11 18:58:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
539
+ [INFO] @ [2024-05-11 18:59:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
540
+ [INFO] @ [2024-05-11 18:59:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
541
+ [INFO] @ [2024-05-11 18:59:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
542
+ [INFO] @ [2024-05-11 18:59:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
543
+ [INFO] @ [2024-05-11 18:59:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
544
+ [INFO] @ [2024-05-11 18:59:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId afc9e6e2-38f2-4819-a825-4b39f95c8261
545
+ [INFO] @ [2024-05-11 18:59:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
546
+ [INFO] @ [2024-05-11 18:59:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
547
+ [INFO] @ [2024-05-11 19:04:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
548
+ [INFO] @ [2024-05-11 19:04:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
549
+ [INFO] @ [2024-05-11 19:05:24] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
550
+ [INFO] @ [2024-05-11 19:05:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
551
+ [INFO] @ [2024-05-11 19:05:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
552
+ [INFO] @ [2024-05-11 19:05:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
553
+ [INFO] @ [2024-05-11 19:05:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId b8d5bb1c-4d75-4519-8a33-be9b4bb4e981
554
+ [INFO] @ [2024-05-11 19:05:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
555
+ [INFO] @ [2024-05-11 19:57:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
556
+ [INFO] @ [2024-05-11 19:58:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
557
+ [INFO] @ [2024-05-11 19:58:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
558
+ [INFO] @ [2024-05-11 19:58:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
559
+ [INFO] @ [2024-05-11 19:58:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
560
+ [INFO] @ [2024-05-11 19:59:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
561
+ [INFO] @ [2024-05-11 19:59:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
562
+ [INFO] @ [2024-05-11 19:59:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
563
+ [INFO] @ [2024-05-11 19:59:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
564
+ [INFO] @ [2024-05-11 19:59:52] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 833a7af4-05ff-48b7-95fc-1ef4bf2f320b
565
+ [INFO] @ [2024-05-11 20:00:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
566
+ [INFO] @ [2024-05-11 20:00:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
567
+ [INFO] @ [2024-05-11 20:00:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
568
+ [INFO] @ [2024-05-11 20:00:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
569
+ [INFO] @ [2024-05-11 20:01:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
570
+ [INFO] @ [2024-05-11 20:01:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 54e119e2-a3ad-432e-af06-70b8836cc12f
571
+ [INFO] @ [2024-05-11 20:01:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
572
+ [INFO] @ [2024-05-11 20:02:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
573
+ [INFO] @ [2024-05-11 20:02:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
574
+ [INFO] @ [2024-05-11 20:02:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
575
+ [INFO] @ [2024-05-11 20:02:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId fce74e46-bb59-41c1-955d-6fc0a1fe0849
576
+ [INFO] @ [2024-05-11 20:02:57] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
577
+ [INFO] @ [2024-05-12 16:35:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
578
+ [INFO] @ [2024-05-12 16:35:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
579
+ [INFO] @ [2024-05-12 16:43:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
580
+ [INFO] @ [2024-05-12 16:43:04] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
581
+ [INFO] @ [2024-05-12 16:51:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
582
+ [INFO] @ [2024-05-12 16:51:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
583
+ [INFO] @ [2024-05-12 16:51:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 309a178e-d4ed-4fcf-a588-3dff0a8f0312
584
+ [INFO] @ [2024-05-12 16:51:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
585
+ [INFO] @ [2024-05-12 16:52:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
586
+ [INFO] @ [2024-05-12 16:52:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
587
+ [INFO] @ [2024-05-12 16:52:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId afddad81-1b1f-4e12-974b-ba06bdaea964
588
+ [INFO] @ [2024-05-12 16:52:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
589
+ [INFO] @ [2024-05-12 16:52:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
590
+ [INFO] @ [2024-05-12 16:52:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId ac9b8061-75ad-4540-b958-8e801906df04
591
+ [INFO] @ [2024-05-12 16:53:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
592
+ [INFO] @ [2024-05-12 16:54:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
593
+ [INFO] @ [2024-05-12 16:54:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 2940ec7d-26c3-429c-a338-2d9d38eb267e
594
+ [INFO] @ [2024-05-12 16:54:08] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
595
+ [INFO] @ [2024-05-12 16:54:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
596
+ [INFO] @ [2024-05-12 16:54:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
597
+ [INFO] @ [2024-05-12 16:54:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
598
+ [INFO] @ [2024-05-12 16:54:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 9bb51e0f-ba0e-433b-aec0-0a86e8d3f483
599
+ [INFO] @ [2024-05-12 16:55:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has existing downloads
600
+ [INFO] @ [2024-05-12 16:55:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
601
+ [INFO] @ [2024-05-12 16:55:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
602
+ [INFO] @ [2024-05-12 16:56:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
603
+ [INFO] @ [2024-05-12 16:56:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId f4a87314-02a7-4491-9229-9733bc8f68b7
604
+ [INFO] @ [2024-05-12 16:57:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
605
+ [INFO] @ [2024-05-12 17:00:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
606
+ [INFO] @ [2024-05-12 17:00:41] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
607
+ [INFO] @ [2024-05-12 17:00:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
608
+ [INFO] @ [2024-05-12 17:00:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 1b93fbd0-4ad3-48d2-ae76-c165b936a669
609
+ [INFO] @ [2024-05-12 17:02:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
610
+ [INFO] @ [2024-05-12 17:04:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
611
+ [INFO] @ [2024-05-12 17:04:15] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
612
+ [INFO] @ [2024-05-12 17:04:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
613
+ [INFO] @ [2024-05-12 17:04:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 4f93f84d-7af6-484d-9a14-9a5658499699
614
+ [INFO] @ [2024-05-12 17:07:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
615
+ [INFO] @ [2024-05-12 17:07:59] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
616
+ [INFO] @ [2024-05-12 17:08:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
617
+ [INFO] @ [2024-05-12 17:08:22] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 9668eab5-3baa-4ee4-8048-6351741feaa7
618
+ [INFO] @ [2024-05-12 17:08:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
619
+ [INFO] @ [2024-05-12 17:09:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
620
+ [INFO] @ [2024-05-12 17:09:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
621
+ [INFO] @ [2024-05-12 17:09:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
622
+ [INFO] @ [2024-05-12 17:09:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 86da0db2-07d7-4a78-b599-0f3fe693d590
623
+ [INFO] @ [2024-05-12 17:10:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
624
+ [INFO] @ [2024-05-12 17:11:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
625
+ [INFO] @ [2024-05-12 17:11:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
626
+ [INFO] @ [2024-05-12 17:11:48] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 062e8f66-5720-4651-bd9e-8eb5bbed9f54
627
+ [INFO] @ [2024-05-12 17:14:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
628
+ [INFO] @ [2024-05-12 17:17:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
629
+ [INFO] @ [2024-05-12 17:17:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
630
+ [INFO] @ [2024-05-12 17:18:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
631
+ [INFO] @ [2024-05-12 17:18:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 72a87f82-87f3-48f6-b8a9-125e41aabfc9
632
+ [INFO] @ [2024-05-12 17:18:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
633
+ [INFO] @ [2024-05-12 17:19:02] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
634
+ [INFO] @ [2024-05-12 17:19:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
635
+ [INFO] @ [2024-05-12 17:19:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 094a2622-dd1a-4285-97f0-66334c0576e5
636
+ [INFO] @ [2024-05-12 17:20:54] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
637
+ [INFO] @ [2024-05-12 17:21:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
638
+ [INFO] @ [2024-05-12 19:32:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
639
+ [INFO] @ [2024-05-12 19:32:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
640
+ [INFO] @ [2024-05-12 19:32:51] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
641
+ [INFO] @ [2024-05-12 19:32:51] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0f54e8ba-8bf4-4328-9451-ba36b1f4cbfc
642
+ [INFO] @ [2024-05-12 19:32:56] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
643
+ [INFO] @ [2024-05-12 19:33:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
644
+ [INFO] @ [2024-05-12 19:33:27] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 9a53b87b-3ab5-4fcf-bcfe-5c6e5fa74f6e
645
+ [INFO] @ [2024-05-12 19:34:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
646
+ [INFO] @ [2024-05-12 19:34:33] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
647
+ [INFO] @ [2024-05-12 19:34:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
648
+ [INFO] @ [2024-05-12 19:34:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 57955231-ffff-436e-b5c9-c04fff3f5e9e
649
+ [INFO] @ [2024-05-12 19:34:47] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
650
+ [INFO] @ [2024-05-12 19:35:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
651
+ [INFO] @ [2024-05-12 19:35:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
652
+ [INFO] @ [2024-05-12 19:35:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 499bd04f-69c0-4d71-b168-4ba7795e8e2b
653
+ [INFO] @ [2024-05-12 19:36:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
654
+ [INFO] @ [2024-05-12 19:41:35] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
655
+ [INFO] @ [2024-05-12 19:41:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
656
+ [INFO] @ [2024-05-12 19:41:45] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId b44e3691-2abe-4fe5-9362-2690ff36bffb
657
+ [INFO] @ [2024-05-12 19:43:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 3 downloads and cancelled 1 downloads
658
+ [INFO] @ [2024-05-12 19:47:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
659
+ [INFO] @ [2024-05-12 19:47:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
660
+ [INFO] @ [2024-05-12 19:47:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
661
+ [INFO] @ [2024-05-12 19:48:39] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 3 downloads and cancelled 1 downloads
662
+ [INFO] @ [2024-05-12 19:48:58] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
663
+ [INFO] @ [2024-05-12 19:49:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
664
+ [INFO] @ [2024-05-12 19:49:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId ae0545d8-9837-46f0-9c5e-baed028fc91d
665
+ [INFO] @ [2024-05-12 19:55:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 3 downloads and cancelled 1 downloads
666
+ [INFO] @ [2024-05-12 20:06:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
667
+ [INFO] @ [2024-05-12 20:06:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
668
+ [INFO] @ [2024-05-12 20:06:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
669
+ [INFO] @ [2024-05-12 20:06:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
670
+ [INFO] @ [2024-05-12 20:07:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
671
+ [INFO] @ [2024-05-12 20:07:44] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
672
+ [INFO] @ [2024-05-12 20:08:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
673
+ [INFO] @ [2024-05-12 20:08:13] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
674
+ [INFO] @ [2024-05-12 20:08:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
675
+ [INFO] @ [2024-05-12 20:08:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
676
+ [INFO] @ [2024-05-12 20:13:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
677
+ [INFO] @ [2024-05-12 20:13:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
678
+ [INFO] @ [2024-05-12 20:13:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
679
+ [INFO] @ [2024-05-12 20:13:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
680
+ [INFO] @ [2024-05-12 20:15:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
681
+ [INFO] @ [2024-05-12 20:15:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
682
+ [INFO] @ [2024-05-12 20:15:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
683
+ [INFO] @ [2024-05-12 20:15:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
684
+ [INFO] @ [2024-05-12 20:21:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
685
+ [INFO] @ [2024-05-12 20:21:49] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
686
+ [INFO] @ [2024-05-12 20:21:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
687
+ [INFO] @ [2024-05-12 20:21:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
688
+ [INFO] @ [2024-05-12 20:22:18] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
689
+ [INFO] @ [2024-05-12 20:22:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
690
+ [INFO] @ [2024-05-12 20:22:19] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
691
+ [INFO] @ [2024-05-12 20:22:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
692
+ [INFO] @ [2024-05-12 20:22:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
693
+ [INFO] @ [2024-05-12 20:22:40] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
694
+ [INFO] @ [2024-05-12 22:55:31] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
695
+ [INFO] @ [2024-05-12 22:55:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
696
+ [INFO] @ [2024-05-12 22:55:32] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
697
+ [INFO] @ [2024-05-12 22:55:54] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
698
+ [INFO] @ [2024-05-12 22:56:00] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
699
+ [INFO] @ [2024-05-12 22:56:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
700
+ [INFO] @ [2024-05-12 22:56:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
701
+ [INFO] @ [2024-05-12 22:56:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
702
+ [INFO] @ [2024-05-12 22:56:23] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
703
+ [INFO] @ [2024-05-12 22:56:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
704
+ [INFO] @ [2024-05-12 22:56:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
705
+ [INFO] @ [2024-05-12 22:56:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
706
+ [INFO] @ [2024-05-12 22:56:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
707
+ [INFO] @ [2024-05-12 22:56:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
708
+ [INFO] @ [2024-05-12 22:57:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
709
+ [INFO] @ [2024-05-12 22:57:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
710
+ [INFO] @ [2024-05-12 22:57:03] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
711
+ [INFO] @ [2024-05-12 22:57:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
712
+ [INFO] @ [2024-05-12 22:57:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
713
+ [INFO] @ [2024-05-12 22:57:17] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
714
+ [INFO] @ [2024-05-12 22:57:36] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
715
+ [INFO] @ [2024-05-12 22:57:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
716
+ [INFO] @ [2024-05-12 22:57:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
717
+ [INFO] @ [2024-05-12 22:58:06] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
718
+ [INFO] @ [2024-05-12 22:58:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
719
+ [INFO] @ [2024-05-12 22:58:07] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
720
+ [INFO] @ [2024-05-12 22:58:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
721
+ [INFO] @ [2024-05-12 22:58:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
722
+ [INFO] @ [2024-05-12 22:58:46] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
723
+ [INFO] @ [2024-05-12 23:01:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
724
+ [INFO] @ [2024-05-12 23:01:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
725
+ [INFO] @ [2024-05-12 23:01:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
726
+ [INFO] @ [2024-05-12 23:01:25] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
727
+ [INFO] @ [2024-05-12 23:01:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
728
+ [INFO] @ [2024-05-12 23:01:26] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
729
+ [INFO] @ [2024-05-12 23:01:50] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
730
+ [INFO] @ [2024-05-12 23:01:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
731
+ [INFO] @ [2024-05-12 23:01:53] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
732
+ [INFO] @ [2024-05-12 23:02:11] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
733
+ [INFO] @ [2024-05-12 23:02:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
734
+ [INFO] @ [2024-05-12 23:02:16] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 13cac2f0-e46f-465b-8a2c-71a043b05bd0
735
+ [INFO] @ [2024-05-12 23:02:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
736
+ [INFO] @ [2024-05-12 23:02:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
737
+ [INFO] @ [2024-05-12 23:02:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
738
+ [INFO] @ [2024-05-12 23:02:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 2397c5bd-44f9-4d60-beee-a5f632c13c41
739
+ [INFO] @ [2024-05-12 23:03:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
740
+ [INFO] @ [2024-05-13 14:21:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
741
+ [INFO] @ [2024-05-13 14:21:37] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
742
+ [INFO] @ [2024-05-13 14:21:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
743
+ [INFO] @ [2024-05-13 14:21:42] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 8a26a105-feac-4955-9c17-d38697218265
744
+ [INFO] @ [2024-05-13 14:23:43] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
745
+ [INFO] @ [2024-05-13 14:23:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
746
+ [INFO] @ [2024-05-13 14:24:29] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
747
+ [INFO] @ [2024-05-13 14:24:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
748
+ [INFO] @ [2024-05-13 14:24:34] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 0c3f9015-2d4c-4a45-b840-af326c0efc04
749
+ [INFO] @ [2024-05-13 20:14:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 connected
750
+ [INFO] @ [2024-05-13 20:14:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
751
+ [INFO] @ [2024-05-13 20:14:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
752
+ [INFO] @ [2024-05-13 20:14:55] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId 8191ab05-2598-4811-a3ba-6a47b325b20b
753
+ [INFO] @ [2024-05-13 20:15:10] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 1 downloads and cancelled 2 downloads
754
+ [INFO] @ [2024-05-13 20:35:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download
755
+ [INFO] @ [2024-05-13 20:35:01] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 requested download with assigned downloadId c0677377-956f-41cd-9a2e-d18c2d4a0ed2
756
+ [INFO] @ [2024-05-13 20:36:38] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has completed 2 downloads and cancelled 1 downloads
757
+ [INFO] @ [2024-05-13 20:38:12] Client da008a54-823a-4c58-b9c7-ae8af10a4b86 has no existing downloads
758
+ [INFO] @ [2024-05-15 18:50:31] Client b6494736-3d97-4725-bdad-d3debba9b121 connected
759
+ [INFO] @ [2024-05-15 18:50:31] Client b6494736-3d97-4725-bdad-d3debba9b121 has no existing downloads
760
+ [INFO] @ [2024-05-27 11:07:05] Client b6494736-3d97-4725-bdad-d3debba9b121 connected
761
+ [INFO] @ [2024-05-27 11:07:05] Client b6494736-3d97-4725-bdad-d3debba9b121 has no existing downloads
762
+ [INFO] @ [2024-05-27 11:07:20] Client b6494736-3d97-4725-bdad-d3debba9b121 requested download
763
+ [INFO] @ [2024-05-27 11:07:20] Client b6494736-3d97-4725-bdad-d3debba9b121 requested download with assigned downloadId d9dc3173-7dbe-4947-864e-4f6818e51acb
764
+ [INFO] @ [2024-05-27 11:07:59] Client b6494736-3d97-4725-bdad-d3debba9b121 has completed 2 downloads and cancelled 1 downloads
logger.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class Logger:
2
+ def __init__(self, log_file):
3
+ self.log_file = log_file
4
+
5
+ # check if log file exixts else create it
6
+ try:
7
+ with open(self.log_file, 'r') as f:
8
+ pass
9
+ except:
10
+ with open(self.log_file, 'w') as f:
11
+ f.write('')
12
+
13
+ def getTimeStamp(self):
14
+ from datetime import datetime
15
+ return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
16
+
17
+ def logError(self, message):
18
+ with open(self.log_file, 'a') as f:
19
+ f.write(f'[ERROR] @ [{self.getTimeStamp()}] {message}\n')
20
+
21
+ def logInfo(self, message):
22
+ with open(self.log_file, 'a') as f:
23
+ f.write(f'[INFO] @ [{self.getTimeStamp()}] {message}\n')
24
+
25
+ def logWarning(self, message):
26
+ with open(self.log_file, 'a') as f:
27
+ f.write(f'[WARNING] @ [{self.getTimeStamp()}] {message}\n')
pwdlv3/README.md ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # PhysicsWallah M3u8 Parser
2
+
3
+ This is a Python script that parses M3u8 files. It uses the argparse library to handle command-line arguments.
4
+
5
+ ## Dependencies
6
+
7
+ The script requires the following executables to be available in the PATH or the user should provide the path to the executables:
8
+
9
+ - [ffmpeg](https://ffmpeg.org/download.html)
10
+ - [mp4decrypt](https://www.bento4.com/downloads/)
11
+ - [nm3](https://github.com/nilaoda/N_m3u8DL-RE) (renamed to nm3 in the script)
12
+
13
+ The script also requires the following Python libraries (which are listed in the `requirements.txt` file
14
+
15
+
16
+ - `requests`: A library for making HTTP requests. It abstracts the complexities of making requests behind a simple API, allowing you to send HTTP/1.1 requests.
17
+
18
+ - `colorama`: Makes ANSI escape character sequences work on Windows and Unix systems, allowing colored terminal text and cursor positioning.
19
+
20
+ - `argparse`: Provides a way to specify command line arguments and options the program is supposed to accept.
21
+
22
+ - `bs4` (BeautifulSoup4): A library for pulling data out of HTML and XML files. It provides Pythonic idioms for iterating, searching, and modifying the parse tree.
23
+
24
+ - `flask`: A micro web framework written in Python. It does not require particular tools or libraries, it has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions.
25
+
26
+ - `flask_socketio`: Gives Flask applications access to low latency bi-directional communications between the clients and the server. The client-side application can use any of the Socket.IO official clients libraries in Javascript, C++, Java and Swift, or any compatible client to establish a permanent connection to the server.
27
+
28
+ To install these dependencies, you would typically run `pip install -r requirements.txt` in your command line.
29
+
30
+ or if you want to install them individually, you can run the following commands:
31
+
32
+ `pip install requests colorama argparse bs4 flask flask_socketio`
33
+
34
+ ## Usage
35
+
36
+ You can use the script with the following command-line arguments:
37
+
38
+ - `--csv-file`: Input csv file. Legacy Support too.
39
+ - `--id`: PhysicsWallh Video Id for single usage. Incompatible with --csv-file. Must be used with --name.
40
+ - `--name`: Name for the output file. Incompatible with --csv-file. Must be used with --url.
41
+ - `--dir`: Output Directory.
42
+ - `--verbose`: Verbose Output.
43
+ - `--version`: Shows the version of the program.
44
+ - `--simulate`: Simulate the download process. No files will be downloaded.
45
+
46
+ ## Example
47
+
48
+ ```bash
49
+ python pwdl.py --csv-file input.csv --dir ./output --verbose
50
+ ```
51
+
52
+ This will parse the M3u8 files listed in `input.csv` and save the output in the `./output` directory. The `--verbose` flag is used to enable verbose output.
53
+
54
+ ## Error Handling
55
+
56
+ The script has built-in error handling. If an error occurs during the parsing of a file, the script will print an error message and continue with the next file. If both csv file and id (or name) is provided, the script will exit with error code 3.
57
+
58
+ ## User Preferences
59
+
60
+ User preferences can be loaded from a `defaults.json` file. These preferences include the temporary directory (`tmpDir`), verbosity of output (`verbose`), and whether to display a horizontal rule (`hr`). If these preferences are not set in the `defaults.json` file, the script will use default values.
61
+
62
+ ## Simulation Mode
63
+
64
+ The script includes a simulation mode, which can be enabled with the `--simulate` flag. In this mode, the script will print the files that would be processed, but no files will be downloaded.
65
+
66
+ ## Error Codes
67
+
68
+
69
+ | Error Name | Error Code | Error Message |
70
+ |----------------------------------|------------|-------------------------------------------------------|
71
+ | noError | 0 | None |
72
+ | defaultsNotFound | 1 | defaults.json not found. Exiting... |
73
+ | dependencyNotFound | 2 | Dependency not found. Exiting... |
74
+ | dependencyNotFoundInPrefs | 3 | Dependency not found in default settings. Exiting... |
75
+ | csvFileNotFound | 4 | CSV file {fileName} not found. Exiting... |
76
+ | downloadFailed | 5 | Download failed for {name} with id {id}. Exiting... |
77
+ | cantLoadFile | 22 | Can't load file {fileName} |
78
+ | flareNotStarted | 23 | Flare is not started. Start the flare server first. |
79
+ | requestFailedDueToUnknownReason | 24 | Request failed due to unknown reason. Status Code: {status_code} |
80
+ | keyExtractionFailed | 25 | Key extraction failed for id -> {id}. Exiting... |
81
+ | keyNotProvided | 26 | Key not provided. Exiting... |
82
+ | couldNotDownloadAudio | 27 | Could not download audio for id -> {id} Exiting... |
83
+ | couldNotDownloadVideo | 28 | Could not download video for {id} Exiting... |
84
+ | couldNotDecryptAudio | 29 | Could not decrypt audio. Exiting... |
85
+ | couldNotDecryptVideo | 30 | Could not decrypt video. Exiting... |
86
+ | methodPatched | 31 | Method is patched. Exiting... |
87
+ | couldNotExtractKey | 32 | Could not extract key. Exiting... |
88
+
89
+ Please note that the `{fileName}`, `{name}`, `{id}`, and `{status_code}` in the Error Message column are placeholders and will be replaced with actual values when the error occurs.
pwdlv3/bin/mp4decrypt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:55ba3287fbc29841212fd6993e82422d29984a845bfbe01a4c1d5b7200d51819
3
+ size 1018392
pwdlv3/bin/nm3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0944a9bdc92ebe25248fe0e3e50927cfecf49a1813a80ccad9017178076e8918
3
+ size 7376524
pwdlv3/defaults.linux.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "flare_url" : "http://localhost:8191/v1",
3
+ "cloudfront_id" : "d1d34p8vz63oiq",
4
+ "patched" : false,
5
+ "os-info" : "linux",
6
+ "tmpDir" : "/tmp" ,
7
+ "verbose" : false,
8
+ "nm3" :"$script/bin/nm3",
9
+ "ffmpeg" :"",
10
+ "mp4decrypt" :"$script/bin/mp4decrypt"
11
+ }
pwdlv3/error.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from utils.glv import Global
2
+
3
+ errorList = {
4
+ "noError": {
5
+ "code": 0,
6
+ "func": lambda: None,
7
+ },
8
+ "defaultsNotFound" : {
9
+ "code": 1,
10
+ "func": lambda: Global.errprint("defaults.json not found. Exiting..."),
11
+ },
12
+ "dependencyNotFound": {
13
+ "code": 2,
14
+ "func": lambda x=None: Global.errprint(f"{'Dependency' if x == None else x } not found. Exiting..."),
15
+ },
16
+ "dependencyNotFoundInPrefs":
17
+ {
18
+ "code": 3,
19
+ "func": lambda x=None: Global.errprint(f"{'Dependency' if x == None else x } not found in default settings. Exiting..."),
20
+ },
21
+ "csvFileNotFound": {
22
+ "code": 4,
23
+ "func": lambda fileName: Global.errprint(f"CSV file {fileName} not found. Exiting..."),
24
+ },
25
+ "downloadFailed": {
26
+ "code": 5,
27
+ "func": lambda name, id: Global.errprint(f"Download failed for {name} with id {id}. Exiting..."),
28
+ },
29
+ "cantLoadFile": {
30
+ "code": 22,
31
+ "func": lambda fileName: Global.errprint(f"Can't load file {fileName}"),
32
+ },
33
+ "flareNotStarted": {
34
+ "code": 23,
35
+ "func": lambda: Global.errprint("Flare is not started. Start the flare server first.")
36
+ },
37
+ "requestFailedDueToUnknownReason": {
38
+ "code": 24,
39
+ "func": lambda status_code: Global.errprint("Request failed due to unknown reason. Status Code: " + str(status_code))
40
+ },
41
+ "keyExtractionFailed": {
42
+ "code": 25,
43
+ "func": lambda id: Global.errprint(f"Key extraction failed for id -> {id}. Exiting...")
44
+ },
45
+ "keyNotProvided": {
46
+ "code": 26,
47
+ "func": lambda: Global.errprint("Key not provided. Exiting...")
48
+ },
49
+ "couldNotDownloadAudio": {
50
+ "code": 27,
51
+ "func": lambda id: Global.errprint(f"Could not download audio for id -> {id} Exiting...")
52
+ },
53
+ "couldNotDownloadVideo": {
54
+ "code": 28,
55
+ "func": lambda: Global.errprint(f"Could not download video for {id} Exiting...")
56
+ },
57
+ "couldNotDecryptAudio": {
58
+ "code": 29,
59
+ "func": lambda: Global.errprint("Could not decrypt audio. Exiting...")
60
+ },
61
+ "couldNotDecryptVideo": {
62
+ "code": 30,
63
+ "func": lambda: Global.errprint("Could not decrypt video. Exiting...")
64
+ },
65
+ "methodPatched": {
66
+ "code": 31,
67
+ "func": lambda: Global.errprint("Method is patched. Exiting...")
68
+ },
69
+ "couldNotExtractKey": {
70
+ "code": 32,
71
+ "func": lambda: Global.errprint("Could not extract key. Exiting...")
72
+ },
73
+ }
74
+
pwdlv3/main.py ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from utils.basicUtils import BasicUtils
2
+ from utils.glv import Global
3
+ from mainUtils.cleanup import Clean
4
+ import os
5
+
6
+
7
+ class Main:
8
+ """
9
+ Main class to handle the processing of video and audio files including download,
10
+ decryption, merging, and cleanup.
11
+
12
+ Attributes:
13
+ id (str): Identifier for the process.
14
+ name (str): Name for the process. Defaults to the value of `id`.
15
+ directory (str): Directory to store the files. Defaults to "./".
16
+ tmpDir (str): Temporary directory for intermediate files. Defaults to './tmp/'.
17
+ nm3Path (str): Path to the NM3 binary. Defaults to 'nm3'.
18
+ ffmpeg (str): Path to the ffmpeg binary. Defaults to 'ffmpeg'.
19
+ mp4d (str): Path to the mp4decrypt binary. Defaults to 'mp4decrypt'.
20
+ flare_url (str): URL for the flare service. Defaults to 'http://localhost:8191/v1'.
21
+ verbose (bool): Flag for verbose output. Defaults to True.
22
+ suppress_exit (bool): Flag to suppress exit on error. Defaults to False.
23
+ """
24
+
25
+ def __init__(self, id, name=None, directory="./", tmpDir="/*auto*/", nm3Path='nm3', ffmpeg="ffmpeg",
26
+ mp4d="mp4decrypt", verbose=True, suppress_exit=False):
27
+ """
28
+ Initialize the Main class with the given parameters.
29
+
30
+ Args:
31
+ id (str): Identifier for the process.
32
+ name (str, optional): Name for the process. Defaults to None.
33
+ directory (str, optional): Directory to store the files. Defaults to "./".
34
+ tmpDir (str, optional): Temporary directory for intermediate files. Defaults to '/*auto*/'.
35
+ nm3Path (str, optional): Path to the NM3 binary. Defaults to 'nm3'.
36
+ ffmpeg (str, optional): Path to the ffmpeg binary. Defaults to 'ffmpeg'.
37
+ mp4d (str, optional): Path to the mp4decrypt binary. Defaults to 'mp4decrypt'.
38
+ # flare_url (str, optional): URL for the flare service. Defaults to 'http://localhost:8191/v1'.
39
+ verbose (bool, optional): Flag for verbose output. Defaults to True.
40
+ suppress_exit (bool, optional): Flag to suppress exit on error. Defaults to False.
41
+ """
42
+ self.id = id
43
+ self.name = name if name else id
44
+ self.directory = directory
45
+ self.tmpDir = BasicUtils.abspath(tmpDir) if tmpDir != '/*auto*/' else BasicUtils.abspath('./tmp/')
46
+ # Create tmp directory if it does not exist
47
+ try:
48
+ if not os.path.exists(self.tmpDir):
49
+ os.makedirs(self.tmpDir)
50
+ except:
51
+ Global.errprint("Could not create tmp directory")
52
+ exit(-1)
53
+ self.nm3Path = BasicUtils.abspath(nm3Path) if nm3Path != 'nm3' else 'nm3'
54
+ self.ffmpeg = BasicUtils.abspath(ffmpeg) if ffmpeg != 'ffmpeg' else 'ffmpeg'
55
+ self.mp4d = BasicUtils.abspath(mp4d) if mp4d != 'mp4decrypt' else 'mp4decrypt'
56
+ # self.flare_url = flare_url
57
+ self.verbose = verbose
58
+ self.suppress_exit = suppress_exit
59
+
60
+ if self.verbose:
61
+ Global.hr()
62
+ Global.dprint(f"ID: {self.id}")
63
+ Global.dprint(f"Name: {self.name}")
64
+ Global.dprint(f"Directory: {self.directory}")
65
+ Global.dprint(f"TmpDir: {self.tmpDir}")
66
+ Global.dprint(f"Nm3Path: {self.nm3Path}")
67
+ Global.dprint(f"FFmpeg: {self.ffmpeg}")
68
+ Global.dprint(f"MP4Decrypt: {self.mp4d}")
69
+ # Global.dprint(f"Flare URL: {self.flare_url}")
70
+ Global.hr()
71
+
72
+ def process(self):
73
+ """
74
+ Main processing function to handle downloading, decrypting, merging, and cleanup of files.
75
+ """
76
+
77
+ from mainUtils import dl
78
+ from mainUtils import key
79
+ from mainUtils import decrypt
80
+ from mainUtils import merge
81
+
82
+ if self.verbose:
83
+ Global.dprint("Starting Main Process... for ID: " + self.id)
84
+
85
+ # 1. Downloading Files
86
+
87
+ dl = dl.DL()
88
+ audio, video = dl.downloadAudioAndVideo(self.id, f'{self.name}-enc', self.directory, self.tmpDir, self.nm3Path,
89
+ self.ffmpeg, self.verbose)
90
+
91
+ # 2. Decrypting Files
92
+
93
+ Global.sprint("Please wait while we decrypt the files...\nFetching key may take some time.")
94
+
95
+ key = key.getKey(self.id, self.verbose)
96
+
97
+ decrypt = decrypt.Decrypt()
98
+
99
+ decrypt.decryptAudio(self.directory, f'{self.name}-enc', key, mp4d=self.mp4d, outfile=self.name,
100
+ verbose=self.verbose, suppress_exit=self.suppress_exit)
101
+ decrypt.decryptVideo(self.directory, f'{self.name}-enc', key, mp4d=self.mp4d, outfile=self.name,
102
+ verbose=self.verbose, suppress_exit=self.suppress_exit)
103
+
104
+ # 3. Merging Files
105
+
106
+ merge = merge.Merge()
107
+ merge.ffmpegMerge(f"{self.directory}/{self.name}-Video.mp4", f"{self.directory}/{self.name}-Audio.mp4",
108
+ f"{self.directory}/{self.name}.mp4", ffmpeg_path=self.ffmpeg, verbose=self.verbose)
109
+
110
+ # 4. Cleanup
111
+ clean = Clean()
112
+ clean.remove(self.directory, f'{self.name}', self.verbose)
pwdlv3/mainUtils/cleanup.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from utils.glv import Global
3
+ class Clean:
4
+
5
+ def removeFile(self,file,verbose):
6
+ try:
7
+ os.remove(file)
8
+ if verbose: Global.sprint(f"Removed file: {file}")
9
+ except:
10
+ Global.errprint(f"Could not remove file: {file}")
11
+
12
+ def remove(self,path,file,verbose=True):
13
+
14
+ audio_enc = f"{path}/{file}-enc.m4a" if os.path.exists(f"{path}/{file}-enc.m4a") else f"{path}/{file}-enc.en.m4a"
15
+ video_enc = f"{path}/{file}-enc.mp4"
16
+
17
+ audio = f"{path}/{file}-Audio.mp4"
18
+ video = f"{path}/{file}-Video.mp4"
19
+
20
+ if verbose:
21
+ Global.hr()
22
+ Global.dprint("Removing TemporaryDL Files...")
23
+ Global.hr()
24
+
25
+ if verbose: Global.dprint("Removing Audio...")
26
+ self.removeFile(audio_enc,verbose)
27
+
28
+ if verbose: Global.dprint("Removing Video...")
29
+ self.removeFile(video_enc,verbose)
30
+
31
+ if verbose: Global.dprint("Removing Dncrypted Audio...")
32
+ self.removeFile(audio,verbose)
33
+
34
+ if verbose: Global.dprint("Removing Dncrypted Video...")
35
+ self.removeFile(video,verbose)
36
+
37
+
pwdlv3/mainUtils/decrypt.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from utils.glv import Global
2
+ from utils.process import shell
3
+ from utils.basicUtils import BasicUtils
4
+ import error
5
+ import os
6
+
7
+ class Decrypt:
8
+
9
+ def decrypt(self,path,name,key,mp4d="mp4decrypt",out="None",outfile="",verbose=True,suppress_exit=False):
10
+
11
+ Global.hr()
12
+
13
+ # making path absolute if not already absolute
14
+ path = BasicUtils.abspath(path)
15
+ Global.dprint(f"Decrypting {out}...")
16
+
17
+ # during various tests
18
+ # it was found that the decrypted audio file is named as <name>.en.m4a
19
+ # hence a simple logic to work around this issue is to check if the file exists
20
+ if not os.path.exists(f'{path}/{name}.m4a') and out == "Audio":
21
+ name = name + ".en"
22
+
23
+ # setting extension based on out
24
+ # i.e if out is Audio then extension is 'm4a' else 'mp4'
25
+ extension = "m4a" if out == "Audio" else "mp4"
26
+
27
+ decrypt_command = f'{mp4d} --key 1:{key} {path}/{name}.{extension} {path}/{"" if not outfile else outfile+"-" }{out}.mp4'
28
+
29
+ if verbose: Global.dprint(f"{out} Decryption Started..."); Global.dprint(f'{decrypt_command}')
30
+
31
+
32
+
33
+ # the main part where the decryption happens
34
+ code = shell(f'{decrypt_command}',stderr="",stdout="")
35
+
36
+ # simple check to see if the decryption was successful or not
37
+ if code == 0:
38
+ Global.dprint(f"{out} Decrypted Successfully")
39
+ else:
40
+
41
+ # if decryption failed then print error message and exit
42
+ error.errorList[f"couldNotDecrypt{out}"]["func"]()
43
+ if not suppress_exit:
44
+ exit(error.errorList[f"couldNotDecrypt{out}"]["code"])
45
+
46
+
47
+
48
+ # decrypts audio
49
+ def decryptAudio(self,path,name,key,mp4d="mp4decrypt",outfile='None',verbose=True,suppress_exit=False):
50
+ self.decrypt(path,name,key,mp4d,"Audio",outfile,verbose,suppress_exit=suppress_exit)
51
+
52
+ # decrypts video
53
+ def decryptVideo(self,path,name,key,mp4d="mp4decrypt",outfile='None',verbose=True,suppress_exit=False):
54
+ self.decrypt(path,name,key,mp4d,"Video",outfile,verbose,suppress_exit=suppress_exit)
pwdlv3/mainUtils/dl.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import error
2
+ from utils.process import shell
3
+ from utils.glv import Global
4
+ from utils.basicUtils import BasicUtils
5
+ class DL:
6
+
7
+ def buildUrl(self,id):
8
+ if id == None:
9
+ error.errorList["idNotProvided"]["func"]()
10
+ exit(error.errorList["idNotProvided"]["code"])
11
+
12
+ return f"https://d1d34p8vz63oiq.cloudfront.net/{id}/master.mpd"
13
+
14
+ def download(self,id,name=None,type="",directory="./",tmpDir="/*auto*/",nm3Path='nm3',ffmpeg='ffmpeg',verbose=True):
15
+ if id == None:
16
+ error.errorList["idNotProvided"]["func"]()
17
+ exit(error.errorList["idNotProvided"]["code"])
18
+
19
+ if name == None: name = id
20
+
21
+
22
+ url = self.buildUrl(id)
23
+
24
+ # setting identifier and filter based on type
25
+
26
+ # identifier is used to identify the type of file
27
+ identifier = "a" if type == "Audio" else "v" if type == "Video" else "av"
28
+
29
+ # filter is used to filter the output of the shell command
30
+ filter = r"^Aud" if type == "Audio" else r"^Vid"
31
+
32
+ # command to download the file
33
+ command = f'{nm3Path} {url} --save-dir {directory} {"--tmp-dir "+tmpDir if not tmpDir == "/*auto*/" else "" } --save-name {name} -s{identifier} best'
34
+
35
+ # Download the audio file using the id
36
+ code = shell(f'{command}',filter)
37
+
38
+ if code == 0:
39
+ return True
40
+ else:
41
+ error.errorList[f"couldNotDownload{type}"]["func"]()
42
+ exit(error.errorList[f"couldNotDownload{type}"]["code"])
43
+
44
+ def downloadAudioAndVideo(self,id,name=None,directory="./",tmpDir="/*auto*/",nm3Path='nm3',ffmpeg='ffmpeg',verbose=True):
45
+ if id == None:
46
+ error.errorList["idNotProvided"]["func"]()
47
+ exit(error.errorList["idNotProvided"]["code"])
48
+
49
+ if name == None: name = id; Global.dprint(f"Name not provided, using id as name: {name}")
50
+
51
+ # removing limitations of relative path
52
+ if not tmpDir == "/*auto*/": BasicUtils.abspath(tmpDir)
53
+ directory = BasicUtils.abspath(directory)
54
+
55
+ if verbose:
56
+ Global.hr()
57
+ Global.dprint(f"ID: {id}")
58
+ Global.dprint(f"Name: {name}")
59
+ Global.dprint(f"Directory: {directory}")
60
+ Global.dprint(f"TmpDir: {tmpDir}")
61
+ Global.dprint(f"Nm3Path: {nm3Path}")
62
+ Global.hr()
63
+ Global.dprint(f"Starting DL...")
64
+
65
+ # section to download audio
66
+ Global.hr(); Global.dprint("Downloading Audio..."); Global.hr()
67
+ self.dlAudio(id,name,directory,tmpDir,nm3Path,verbose)
68
+
69
+ # section to download video
70
+ Global.hr(); Global.dprint("Downloading Video..."); Global.hr()
71
+ self.dlVideo(id,name,directory,tmpDir,nm3Path,verbose)
72
+
73
+ # return the paths of the downloaded files
74
+ return [f"{directory}/{name}.mp4",f"{directory}/{name}.m4a"]
75
+
76
+
77
+
78
+
79
+ def dlAudio(self,id,name=None,directory="./",tmpDir="/*auto*/",nm3Path='nm3',verbose=True):
80
+ self.download(id,name,"Audio",directory,tmpDir,nm3Path,verbose=verbose)
81
+
82
+ def dlVideo(self,id,name=None,directory="./",tmpDir="/*auto*/",nm3Path='nm3',verbose=True):
83
+ self.download(id,name,"Video",directory,tmpDir,nm3Path,verbose=verbose)
84
+
85
+
pwdlv3/mainUtils/key.py ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import json
3
+ from bs4 import BeautifulSoup as BS
4
+ import re
5
+ from utils.keyUtils import base64_to_hex
6
+ from utils.glv import Global
7
+ import error
8
+
9
+
10
+ def log_info(id, verbose, attempt):
11
+ if verbose:
12
+ Global.dprint("Starting the script for key extraction" + f" Retry: {attempt}" if attempt > 0 else "")
13
+ if verbose:
14
+ Global.sprint(f'id -> {id}')
15
+ if verbose:
16
+ Global.sprint("Sending request to the server")
17
+ Global.dprint("Hardcoded URL: request.get -> http://studyrays.site/drmplayer.php?v=https://d1d34p8vz63oiq"
18
+ ".cloudfront.net/{id}/master.mpd")
19
+
20
+
21
+ def send_request(id):
22
+ try:
23
+
24
+ import http.client
25
+
26
+ conn = http.client.HTTPSConnection("api.scrapingant.com")
27
+
28
+ conn.request("GET",
29
+ f"/v2/general?url=https%3A%2F%2Fstudyrays.site%2Fdrmplayer.php%3Fv%3Dhttps%3A%2F%2Fd1d34p8vz63oiq.cloudfront.net%2F{id}%2Fmaster.mpd&x-api-key=806b77b95dd643caae01d4e240da9159&proxy_type=residential&proxy_country=IN&browser=false")
30
+
31
+ res = conn.getresponse()
32
+
33
+ return res.read()
34
+
35
+ except requests.exceptions.RequestException as e:
36
+ error.errorList["flareNotStarted"]["func"]()
37
+ exit(error.errorList["flareNotStarted"]["code"])
38
+
39
+
40
+ def parse_response(response):
41
+ try:
42
+
43
+ return response.decode('utf-8')
44
+
45
+ except (KeyError, json.JSONDecodeError):
46
+ error.errorList["requestFailedDueToUnknownReason"]["func"](response.status_code)
47
+ exit(error.errorList["requestFailedDueToUnknownReason"]["code"])
48
+
49
+
50
+ def extract_key(html):
51
+
52
+ soup = BS(html, 'html.parser')
53
+ scripts = soup.find_all('script')
54
+
55
+ for script in scripts:
56
+ script_content = script.text
57
+ if 'const protData' in script_content:
58
+ protData_script = script_content
59
+ break
60
+ else:
61
+ return None
62
+
63
+ pattern = r'const\s+protData\s*=\s*({.*?});'
64
+ match = re.search(pattern, protData_script, re.DOTALL)
65
+
66
+ if match:
67
+ protData_content = match.group(1)
68
+ keylist = json.loads(protData_content)['org.w3.clearkey']['clearkeys']
69
+ for kid in keylist:
70
+ return base64_to_hex(keylist[kid])
71
+ return None
72
+
73
+ # main function
74
+ def getKey(id, verbose=True,retries=2):
75
+
76
+ for attempt in range(retries):
77
+ log_info(id, verbose, attempt)
78
+
79
+ response = send_request(id)
80
+
81
+ html = parse_response(response)
82
+
83
+ key = extract_key(html)
84
+ if key:
85
+ return key
86
+ else:
87
+ if verbose:
88
+ Global.sprint("protData variable not found in the script. Retrying!")
89
+ return -1
pwdlv3/mainUtils/merge.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from utils.process import shell
2
+ from utils.glv import Global
3
+ class Merge:
4
+ def ffmpegMerge(self,input1,input2,output,ffmpeg_path="ffmpeg",verbose=False):
5
+
6
+
7
+ if verbose: Global.hr();Global.dprint('Attempting ffmpeg merge')
8
+ if verbose: Global.dprint(f'{ffmpeg_path} -i {input1} -i {input2} -c copy {output}')
9
+
10
+ shell(f'{ffmpeg_path} -i {input1} -i {input2} -c copy {output}',r'^\[out#0\/mp4')
11
+
12
+ return output
pwdlv3/pwdl.py ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ from error import errorList
3
+ from utils.glv import Global
4
+ import sys
5
+ from utils.os2 import SysFunc
6
+ import os
7
+ from main import Main
8
+ from startup.checkup import CheckState
9
+
10
+ # global variables
11
+ prefs = {}
12
+ glv = Global()
13
+ os2 = SysFunc()
14
+
15
+ # hardcoding the list of executables required for the script to run
16
+ # should be available in the PATH or the user should provide the path to the executables
17
+ EXECUTABLES = ['ffmpeg', 'mp4decrypt', 'nm3']
18
+
19
+
20
+ def main():
21
+
22
+ # parsing the arguments
23
+ parser = argparse.ArgumentParser(description='PhysicsWallah M3u8 parser.')
24
+
25
+ parser.add_argument('--csv-file', type=str, help='Input csv file. Legacy Support too.')
26
+ parser.add_argument('--id', type=str,
27
+ help='PhysicsWallh Video Id for single usage. Incompatible with --csv-file. Must be used with --name')
28
+ parser.add_argument('--name', type=str,
29
+ help='Name for the output file. Incompatible with --csv-file. Must be used with --id')
30
+ parser.add_argument('--dir', type=str, help='Output Directory')
31
+ parser.add_argument('--verbose', action='store_true', help='Verbose Output')
32
+ parser.add_argument('--version', action='version', version='%(prog)s 1.0')
33
+ parser.add_argument('--simulate', action='store_true',
34
+ help='Simulate the download process. No files will be downloaded.)')
35
+
36
+ args = parser.parse_args()
37
+
38
+ # user_input is given preference i.e if --verbose is true it will override
39
+ # however if --verbose is false but prefs['verbose'] is true
40
+ glv.vout = args.verbose
41
+
42
+ global prefs
43
+
44
+ # check if all dependencies are installed
45
+ state = CheckState().checkup(EXECUTABLES, verbose=glv.vout)
46
+ prefs = state['prefs']
47
+
48
+ # --------------------------------------------------------------------------------------------------------------------------------------
49
+
50
+ # loading user preferences from the defaults.json file
51
+
52
+ # setting verbose output
53
+ if not glv.vout and prefs['verbose']: glv.vout = prefs['verbose']
54
+
55
+ # checking for tmpDir
56
+ if 'tmpDir' in prefs:
57
+ tmpDir = SysFunc.modify_path(prefs['tmpDir'])
58
+ if not os.path.exists(tmpDir):
59
+ os.makedirs(tmpDir)
60
+ else:
61
+ prefs['tmpDir'] = './tmp/'
62
+
63
+ # setting up tmp directory
64
+ if glv.vout: Global.hr(); glv.dprint(f"Tmp Dir is: {SysFunc.modify_path(prefs['tmpDir'])}")
65
+
66
+ # setting up output directory
67
+ if args.dir:
68
+ OUT_DIRECTORY = os.path.abspath(os.path.expandvars(args.dir))
69
+ else:
70
+ OUT_DIRECTORY = './'
71
+ if glv.vout: Global.hr(); glv.dprint(f'Output Directory: {OUT_DIRECTORY}')
72
+
73
+ # setting up hr
74
+ if not 'hr' in prefs:
75
+ Global.disable_hr = False
76
+ elif not prefs['hr']:
77
+ Global.disable_hr = True
78
+
79
+ if glv.vout: Global.hr(); glv.dprint(f"Horizontal Rule: {not Global.disable_hr}")
80
+
81
+ # --------------------------------------------------------------------------------------------------------------------------------------
82
+ # end of loading user preferences
83
+
84
+
85
+ # starting the main process
86
+
87
+ #if both csv file and (id or name) is provided then -> exit with error code 3
88
+ if args.csv_file and (args.id or args.name):
89
+ print("Both csv file and id (or name) is provided. Unable to decide. Aborting! ...")
90
+ sys.exit(3)
91
+
92
+ # handle in case --csv-file is provided
93
+ if args.csv_file:
94
+
95
+ # simulation mode
96
+ if args.simulate:
97
+ print("Simulating the download csv process. No files will be downloaded.")
98
+ print("File to be processed: ", args.csv_file)
99
+ exit(0)
100
+
101
+ # exiting in case the CSV File is not found
102
+ if not os.path.exists(args.csv_file):
103
+ errorList['csvFileNotFound']['func'](args.csv_file)
104
+ sys.exit(errorList['csvFileNotFound']['code'])
105
+
106
+ with open(args.csv_file, 'r') as f:
107
+ for line in f:
108
+ name, id = line.strip().split(',')
109
+
110
+ # adding support for csv file with partial errors
111
+ try:
112
+ Main(id=id,
113
+ name=name,
114
+ directory=OUT_DIRECTORY,
115
+ ffmpeg=state['ffmpeg'],
116
+ nm3Path=state['nm3'],
117
+ mp4d=state['mp4decrypt'],
118
+ tmpDir=prefs['tmpDir'],
119
+ verbose=glv.vout,
120
+ suppress_exit=True # suppress exit in case of error (as multiple files are being processed)
121
+ ).process()
122
+
123
+ except Exception as e:
124
+ errorList['downloadFailed']['func'](name, id)
125
+
126
+
127
+
128
+ # handle in case key and name is given
129
+ elif args.id and args.name:
130
+
131
+ # simulation mode
132
+ if args.simulate:
133
+ print("Simulating the download process. No files will be downloaded.")
134
+ print("Id to be processed: ", args.id)
135
+ print("Name to be processed: ", args.name)
136
+ exit(0)
137
+
138
+ try:
139
+
140
+ Main(id=args.id,
141
+ name=args.name,
142
+ directory=OUT_DIRECTORY,
143
+ ffmpeg=state['ffmpeg'],
144
+ nm3Path=state['nm3'],
145
+ mp4d=state['mp4decrypt'],
146
+ tmpDir=prefs['tmpDir'],
147
+ verbose=glv.vout).process()
148
+
149
+ except Exception as e:
150
+
151
+ errorList['downloadFailed']['func'](args.name, args.id)
152
+ sys.exit(errorList['downloadFailed']['code'])
153
+
154
+ # in case neither is used
155
+ else:
156
+ exit(1)
157
+
158
+
159
+ if __name__ == "__main__":
160
+ main()
pwdlv3/resolvefiles.py ADDED
File without changes
pwdlv3/setup.sh ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # Download defaults.json from the given URL and save as "defaults.json"
4
+ curl -o defaults.json https://raw.githubusercontent.com/shubhamakshit/pwdlv3/main/defaults.linux.json
5
+
6
+ # Ensure pip is installed by downloading and running get-pip.py
7
+ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
8
+ python_installed=false
9
+
10
+ if command -v python &> /dev/null
11
+ then
12
+ python_installed=true
13
+ echo "Python is installed"
14
+ python get-pip.py
15
+ python -m pip install -r requirements.txt
16
+ elif command -v python3 &> /dev/null
17
+ then
18
+ python_installed=true
19
+ echo "Python3 is installed"
20
+ python3 get-pip.py
21
+ python3 -m pip install -r requirements.txt
22
+ else
23
+ echo "Python is not installed"
24
+ # exit if python is not installed
25
+ exit 1
26
+ fi
27
+
28
+ # Clean up get-pip.py
29
+ rm get-pip.py
30
+
31
+ # Get the absolute path of the script's directory
32
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
33
+
34
+ # Check if 'alias pwdl' is already present in ~/.bashrc
35
+ if ! grep -q "alias pwdl" ~/.bashrc
36
+ then
37
+ # Add alias to ~/.bashrc
38
+ echo "alias pwdl='$SCRIPT_DIR/pwdl.py'" >> ~/.bashrc
39
+ fi
40
+
41
+ # Source ~/.bashrc to make the alias available in the current session
42
+ source ~/.bashrc
43
+
44
+ # Notify the user to restart their terminal to apply the alias if not sourced
45
+ echo "Please restart your terminal or run 'source ~/.bashrc' to apply the alias."
pwdlv3/startup/checkup.py ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import error
2
+ import os
3
+ from utils.os2 import SysFunc
4
+ from startup.flareCheck import checkFlare
5
+ from utils.glv import Global
6
+
7
+ class CheckState:
8
+
9
+ def __init__(self) -> None:
10
+ pass
11
+
12
+ def checkup(self,executable,verbose=True):
13
+
14
+ state = {}
15
+
16
+ # set script path to ../startup
17
+ # this is the path to the folder containing the pwdl.py file
18
+ # since the checkup.py is in the startup folder, we need to go one level up
19
+ if verbose: Global.hr();Global.dprint("Setting script path...")
20
+ if verbose: Global.errprint('Warning! Hard Coded \'script_path\' location to __file__/../startup')
21
+
22
+ Global.script_path = os.path.abspath(os.path.join(os.path.dirname(__file__),'..'))
23
+ default_json = os.path.join(Global.script_path,'defaults.json')
24
+
25
+ # check if defaults.json exists
26
+ # and if it does, load the preferences
27
+ if verbose: Global.hr();Global.dprint("Checking for default settings...")
28
+
29
+ if verbose: Global.hr();Global.dprint(f"Checking at {default_json}")
30
+ if verbose: Global.errprint('Warning!\nHard Coded \'defaults.json\' location to $script/default.json ')
31
+
32
+ if not os.path.exists(default_json):
33
+ error.errorList["defaultsNotFound"]["func"]()
34
+ exit(error.errorList["defaultsNotFound"]["code"])
35
+
36
+ if verbose: Global.sprint("Default settings found."); Global.hr()
37
+
38
+ # load the preferences
39
+ from startup.userPrefs import PreferencesLoader
40
+ prefs = PreferencesLoader(file_name=default_json,verbose=verbose).prefs
41
+
42
+ # check if method is patched (currently via userPrefs.py)
43
+ if 'patched' in prefs:
44
+ if prefs['patched']:
45
+ error.errorList["methodPatched"]["func"]()
46
+ exit(error.errorList["methodPatched"]["code"])
47
+
48
+ # FLare no longer required
49
+ # if verbose: Global.hr(); Global.dprint("Checking for Flare...")
50
+ # default url is localhost:8191
51
+ # however user can change it in the preferences file
52
+ # if verbose: Global.dprint(f"Checking at {prefs['flare_url'] if 'flare_url' in prefs else 'http://localhost:8191/v1'}")
53
+ # if not checkFlare(prefs['flare_url'] if 'flare_url' in prefs else 'http://localhost:8191/v1'):
54
+ # error.errorList["flareNotStarted"]["func"]()
55
+ # exit(error.errorList["flareNotStarted"]["code"])
56
+ #
57
+ # if verbose: Global.sprint("Flare is running."); Global.hr()
58
+
59
+ os2 = SysFunc()
60
+
61
+ found= []
62
+ notFound = []
63
+
64
+ for exe in executable:
65
+ if verbose: Global.hr(); Global.dprint(f"Checking for {exe}...")
66
+
67
+ if os2.which(exe) == 1:
68
+ if verbose: error.errorList["dependencyNotFound"]["func"](exe)
69
+ if verbose: print(f"{exe} not found on path! Checking in default settings...")
70
+
71
+ # add exe's which are found to the found list
72
+ found.append(exe)
73
+ # add exe's which are not found to the notFound list
74
+ notFound.append(exe)
75
+
76
+ else:
77
+ if verbose: Global.sprint(f"{exe} found.")
78
+ state[exe] = exe
79
+
80
+ if len(notFound) > 0:
81
+
82
+ if verbose: Global.hr();Global.dprint("Following dependencies were not found on path. Checking in default settings...")
83
+ if verbose: Global.dprint(notFound); Global.hr()
84
+
85
+ for exe in notFound:
86
+
87
+ if verbose: Global.dprint(f"Checking for {exe} in default settings...")
88
+
89
+ if exe in prefs:
90
+
91
+ if verbose: Global.sprint(f"Key for {exe} found in default settings.")
92
+ if verbose: Global.sprint(f"Value: {prefs[exe]}")
93
+ if verbose: Global.dprint(f"Checking for {exe} at '{prefs[exe].strip()}' ...")
94
+
95
+ if not os.path.exists(prefs[exe].strip()):
96
+ Global.errprint(f"{exe} not found at {prefs[exe].strip()}")
97
+ error.errorList["dependencyNotFoundInPrefs"]["func"](exe)
98
+ exit(error.errorList["dependencyNotFoundInPrefs"]["code"])
99
+
100
+ if verbose: Global.sprint(f"{exe} found at {prefs[exe].strip()}")
101
+ state[exe] = prefs[exe].strip()
102
+
103
+
104
+ else:
105
+ error.errorList["dependencyNotFoundInPrefs"]["func"](exe)
106
+ exit(error.errorList["dependencyNotFoundInPrefs"]["code"])
107
+
108
+ if verbose: Global.hr()
109
+
110
+ state['prefs'] = prefs
111
+
112
+
113
+ return state
114
+
115
+
pwdlv3/startup/flareCheck.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+
3
+ def checkFlare(flareUrl="http://localhost:8191/v1"):
4
+
5
+ url = f"{flareUrl}"
6
+ headers = {"Content-Type": "application/json"}
7
+ data = {
8
+ "cmd": "request.get",
9
+ "url": "http://www.google.com/",
10
+ "maxTimeout": 60000
11
+ }
12
+ try:
13
+ response = requests.post(url, headers=headers, json=data)
14
+ return response.ok
15
+ except Exception as e:
16
+ return False
17
+
pwdlv3/startup/userPrefs.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import error
3
+ import os
4
+ from utils.basicUtils import BasicUtils
5
+
6
+ class PreferencesLoader:
7
+ def __init__(self, file_name='defaults.json', verbose=True):
8
+ self.file_name = file_name
9
+ self.prefs = {}
10
+
11
+ # defining some variables that can be used in the preferences file
12
+ self.vars = {
13
+
14
+ # $script is the path to the folder containing the pwdl.py file
15
+ # Since the userPrefs.py is in the startup folder,
16
+ # we need to go one level up however we make the exception that if the pwdl.py is in the same folder as
17
+ # the startup folder, we don't need to go one level up
18
+ "$script" : BasicUtils.abspath(os.path.dirname(__file__)+ ('/..' if not os.path.exists(os.path.dirname(__file__) + '../pwdl.py') else '')),
19
+ "$home" : os.path.expanduser("~"),
20
+ }
21
+
22
+ self.load_preferences()
23
+
24
+ # if verbose is true, print the preferences
25
+ if verbose:
26
+ self.print_preferences()
27
+
28
+
29
+ def load_preferences(self):
30
+ try:
31
+
32
+ with open(self.file_name, 'r') as json_file:
33
+
34
+ # read the contents of the file (so that we can replace the variables with their values)
35
+ contents = json_file.read()
36
+
37
+ # replace the variables with their values
38
+ for var in self.vars:
39
+ contents = contents.replace(var,self.vars[var])
40
+
41
+ # replace the backslashes with forward slashes
42
+ contents.replace('\\','/')
43
+
44
+ self.prefs = json.loads(contents)
45
+
46
+ # if the file is not found, print an error message and exit
47
+ except FileNotFoundError:
48
+ error.errorList["cantLoadFile"]["func"](self.file_name)
49
+ exit(error.errorList["cantLoadFile"]["code"])
50
+
51
+
52
+ # print the preferences (internal function)
53
+ def print_preferences(self):
54
+ for key in self.prefs:
55
+ print(f'{key} : {self.prefs[key]}')
pwdlv3/test.csv ADDED
@@ -0,0 +1 @@
 
 
1
+ 1,0
pwdlv3/util.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+
3
+ csv_file = input('Enter CSV file:')
4
+
5
+ json = ''
6
+
7
+ x = json.loads(json)
8
+
9
+ import re
10
+
11
+ def extract_uuid(text):
12
+ """
13
+ Extracts UUIDs from a string using a regular expression.
14
+
15
+ Args:
16
+ text: The string to search for UUIDs.
17
+
18
+ Returns:
19
+ A list of extracted UUIDs, or an empty list if none are found.
20
+ """
21
+ pattern = r"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"
22
+ matches = re.findall(pattern, text)
23
+ return matches
24
+
25
+ def generate_safe_filename(filename):
26
+ """
27
+ Converts a filename to a safe format containing only alphabets, periods (.), and colons (:).
28
+
29
+ Args:
30
+ filename: The original filename to be converted.
31
+
32
+ Returns:
33
+ A safe filename string with only allowed characters.
34
+ """
35
+ # Replace all characters except alphabets, periods, and colons with underscores
36
+ safe_filename = re.sub(r"[^\w\.\:]", "_", filename)
37
+ return safe_filename
38
+
39
+ lines = []
40
+
41
+ for videos in x['data']:
42
+
43
+ line = f"{generate_safe_filename(videos['title'])},{extract_uuid(videos['content'][0]['videoUrl'])[0]}"
44
+ lines.append(line)
45
+
46
+ with open(csv_file, 'w') as f:
47
+ f.write('\n'.join(lines))
pwdlv3/utils/basicUtils.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ import os
2
+
3
+ class BasicUtils:
4
+
5
+ @staticmethod
6
+ def abspath(path):
7
+ return str(os.path.abspath(os.path.expandvars(path))).replace("\\", "/")
pwdlv3/utils/glv.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from colorama import Fore, Style, init
2
+ import shutil
3
+
4
+ # Initialize colorama
5
+ init()
6
+
7
+ class Global:
8
+
9
+ disable_hr = False
10
+
11
+ def __init__(self, vout=True, outDir="./"):
12
+ self.outDir = outDir
13
+ self.vout = vout
14
+
15
+ @staticmethod
16
+ def set_color(color, style=None):
17
+ """Prints text in the specified color and style."""
18
+ print(getattr(Fore, color), end="")
19
+ if style:
20
+ print(getattr(Style, style), end="")
21
+
22
+ @staticmethod
23
+ def reset():
24
+ """Resets text color and style to defaults."""
25
+ print(Style.RESET_ALL, end="")
26
+
27
+ @staticmethod
28
+ def print_colored(text, color, style=None):
29
+ """Prints text in the specified color and style, resetting afterward."""
30
+ Global.set_color(color, style)
31
+ print(text)
32
+ Global.reset()
33
+
34
+ @staticmethod
35
+ def dprint(text):
36
+ """Prints debug text in yellow."""
37
+ Global.print_colored(text, "YELLOW")
38
+
39
+ @staticmethod
40
+ def errprint(text):
41
+ """Prints error text in red."""
42
+ Global.print_colored(text, "RED")
43
+
44
+ @staticmethod
45
+ def setDebug():
46
+ """Sets the text color to yellow (for debugging)."""
47
+ Global.set_color("YELLOW")
48
+
49
+ @staticmethod
50
+ def setSuccess():
51
+ """Sets the text color to green (for success messages)."""
52
+ Global.set_color("GREEN")
53
+
54
+ @staticmethod
55
+ def sprint(text):
56
+ """Prints success text in green."""
57
+ Global.print_colored(text, "GREEN")
58
+
59
+ @staticmethod
60
+ def hr():
61
+
62
+ # Disable horizontal rule if set
63
+ if Global.disable_hr:
64
+ return
65
+
66
+ """Fills the entire terminal with = (one row only)."""
67
+ columns, _ = shutil.get_terminal_size()
68
+ print("-" * columns)
pwdlv3/utils/keyUtils.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+
3
+ def base64_to_hex(base64_str):
4
+ # Replace special characters not in base64 list with '/'
5
+ base64_str = base64_str.replace('-', '+').replace('_', '/')
6
+
7
+ # Add padding if necessary
8
+ padding = len(base64_str) % 4
9
+ if padding:
10
+ base64_str += '=' * (4 - padding)
11
+
12
+ # Convert base64 to bytes
13
+ base64_bytes = base64_str.encode('utf-8')
14
+
15
+ # Decode base64 bytes to hex bytes
16
+ hex_bytes = base64.b64decode(base64_bytes).hex()
17
+
18
+ return hex_bytes
19
+
pwdlv3/utils/os2.py ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import platform
2
+ import os
3
+ import error
4
+ from utils.process import shell
5
+ # 0 - linux
6
+ # 1 - windows
7
+ # 2 - mac (currently not supported)
8
+
9
+ class SysFunc:
10
+ def __init__(self,os=1 if "Windows" in platform.system() else 0 if "Linux" in platform.system() else -1):
11
+ if os == -1:
12
+ raise Exception("UnsupportedOS")
13
+ self.os = os
14
+
15
+
16
+ def clear(self):
17
+ if self.os == 0:
18
+ os.system("clear")
19
+ elif self.os == 1:
20
+ os.system("cls")
21
+ else:
22
+ raise Exception("UnsupportedOS")
23
+
24
+
25
+ def which(self,program):
26
+
27
+ if self.os == 0:
28
+ if shell('which',stderr="",stdout="") != 1:
29
+ error.errorList["dependencyNotFound"]["func"]('which')
30
+ exit(error.errorList["dependencyNotFound"]["code"])
31
+ else:
32
+ self.whichPresent = True
33
+
34
+ return shell(f"which {program}",stderr="",stdout="")
35
+
36
+ elif self.os == 1:
37
+
38
+ if shell('where',stderr="",stdout="") != 2:
39
+ error.errorList["dependencyNotFound"]["func"]('where')
40
+ exit(error.errorList["dependencyNotFound"]["code"])
41
+ else:
42
+ self.whichPresent = True
43
+ return shell(f"where {program}" , stderr="",stdout="")
44
+ else:
45
+ raise Exception("UnsupportedOS")
46
+
47
+ @staticmethod
48
+ def modify_path(path):
49
+ expanded_path = os.path.expandvars(path)
50
+ absolute_path = os.path.abspath(expanded_path)
51
+ modified_path = absolute_path.replace(os.sep, '/')
52
+ return modified_path
53
+
pwdlv3/utils/process.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ import re
3
+ import sys
4
+
5
+
6
+ def shell(command, filter=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True):
7
+ import os
8
+
9
+ # Set PYTHONUNBUFFERED environment variable
10
+ os.environ['PYTHONUNBUFFERED'] = '1'
11
+
12
+ command = to_list(command)
13
+
14
+ process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
15
+
16
+ # Read and print the output in real-time
17
+ while True:
18
+ output = process.stdout.readline()
19
+ if output == '' and process.poll() is not None:
20
+ break
21
+ if output and filter is not None and re.search(filter, output):
22
+ print(output.strip())
23
+
24
+ # Wait for the process to complete and get the return code
25
+ return_code = process.poll()
26
+
27
+ return return_code
28
+
29
+
30
+ def to_list(variable):
31
+ if isinstance(variable, list):
32
+ return variable
33
+ elif variable is None:
34
+ return []
35
+ else:
36
+ # Convert to string and then to list by splitting at whitespaces
37
+ return variable.split()
requirements.txt ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ requests
2
+ colorama
3
+ argparse
4
+ bs4
5
+ flask
6
+ flask_socketio
7
+ gunicorn
8
+ eventlet
9
+ flask_cors
10
+ gunicorn
11
+ gevent