├── .gitignore ├── README.md ├── assets ├── first-cti-pss-circl.pdf └── firstcti2024.png ├── doc └── diagram │ ├── pss-overview.excalidraw │ ├── pss-overview.png │ ├── pss-overview.svg │ └── pss-tor-safe-browsing │ ├── PSS-tor-safe-browsing.excalidraw │ └── PSS-tor-safe-browsing.png ├── private_search_set ├── README.md ├── __init__.py ├── bloom_filter_base.py ├── bloom_filter_dcso.py ├── cli.py └── main.py ├── setup.py └── tests ├── __init__.py ├── test_main.py └── word_list.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore compiled Python files 2 | *.pyc 3 | 4 | # Ignore virtual environment 5 | venv/ 6 | 7 | # Ignore IDE files 8 | .vscode/ 9 | .idea/ 10 | 11 | # Ignore package build directory 12 | dist/ 13 | *.egg-info/ 14 | 15 | # Ignore cache and log files 16 | __pycache__/ 17 | *.log 18 | 19 | # Ignore environment-specific files 20 | .env 21 | .env.* 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Private Search Set (PSS) 2 | 3 | Private Search Set (PSS) is an extension to [standard Bloom filter](https://github.com/hashlookup/fleur) or a standalone hash file to describe and share private set. 4 | 5 | ![Private Search Set (PSS) - Overview](https://raw.githubusercontent.com/hashlookup/private-search-set/main/doc/diagram/pss-overview.png) 6 | 7 | ## FIRST CTI 2024 presentation 8 | 9 | [![FIRST CTI 2024 presentation](https://raw.githubusercontent.com/hashlookup/private-search-set/main/assets/firstcti2024.png)](https://www.youtube.com/watch?v=Ns-0XhDrQyw) 10 | 11 | [slides](https://raw.githubusercontent.com/hashlookup/private-search-set/main/assets/first-cti-pss-circl.pdf) 12 | 13 | ## Abstract 14 | 15 | The Private Search Set (PSS) is an extension to the standard Bloom filter or a standalone hash file to describe and share private set. It provides features such as fast lookup of values without disclosing the values, easy distribution of private sets to a group of users or organizations, watermarking and tracking down potential leak of a private search set (PSS), offline private search, and flexible meta-format to describe and extend the private search set (PSS). 16 | 17 | ## Features 18 | 19 | - Fast lookup of values (such as indicators, hashes or any text) without disclosing the values 20 | - Easily distribute private sets to a group of users or organisations 21 | - Watermarking and tracking down potential leak of a private search set (PSS) 22 | - Offline private search 23 | - Flexible meta-format to describe and extend the private search set (PSS) 24 | 25 | ## Use-cases 26 | 27 | - Improved privacy and security for users and organisations willing to participate in information sharing communities 28 | - Reduced risk of data breaches and leaks of cyber threat intelligence 29 | - Increased ability to protect sensitive information or information which could be abused such as CSAM (Child Sexual Abuse Material) or personal information leak 30 | - Enhanced ability to share information with trusted parties without compromising privacy 31 | 32 | ## Overview of creation and lookup of PSS 33 | 34 | ~~~~mermaid 35 | flowchart TD 36 | Y["canonize(foobar.onion)"] --> A 37 | A["insert keyhashed(foobar.onion)"] -->|key, Blake2| B[key-hashed] 38 | B --> |insert| C[Distributed PSS file] 39 | B --> |insert| D[Distributed PSS Bloomfilter] 40 | style B fill:#0f0,stroke:#333,stroke-width:4px 41 | style Y fill:#0f0,stroke:#333,stroke-width:4px 42 | style A fill:#0f0,stroke:#333,stroke-width:4px 43 | style Z fill:#fff,stroke:#333,stroke-width:4px 44 | Z["search keyhashed(canonized foobar.onion)"] -->|search| C 45 | Z["search keyhashed(canonized foobar.onion)"] -->|search| D 46 | ~~~~ 47 | 48 | ## Meta format 49 | 50 | |Key name|Type|Description|Required| 51 | |:-------|:----|:---|:---:| 52 | |`version`|`number`|Version of the Private Search Set (PSS).|✓| 53 | |`name`|`string`|A concise name used for the directory name.|✓| 54 | |`description`|`string`|Human readable description of the set.|✓| 55 | |`generated-timestamp`|`number`|Generation timestamp in epoch format. |✓| 56 | |`algorithm`|`string`|Keyed-hash message authentication. Available:
- Blake2b
- Blake3
- HMAC-SHA-256
- HMAC-SHA-512 |✓| 57 | |`keyid`|`string`|The reference to the key used in the keyed-hash message authentication algorithm. If the default value is used, then the private shared key `infected`.|✓| 58 | |`filter`|`hash`|The filter description along with its type, format and model.|✓| 59 | |`misp-attribute-types`|`array`|Array of `string` with the types covered by the private search set. Types can be any from types [mentioned in the default MISP types](https://www.circl.lu/doc/misp/categories-and-types/#types). If not specified, `text` type is covered.|-| 60 | |`misp-object-template`|`array`|Array of `string` with the object template name and the version separated with a semicolon such as `person:19`.|-| 61 | |`canonicalization-format`|`string`|Meta function used expressed in Python functions. Such as `lower()[:10]`|-| 62 | |`openpgp-encrypted-key`|`string`|Base64 OpenPGP message encrypting the reference `keyid`. This is optional as the key can be distributed in different means such as dedicated MISP API key or other secure channel.|-| 63 | 64 | ### Meta format `format` 65 | 66 | #### Format type `bloomfilter` 67 | 68 | |Key name|Type|Description|Required| 69 | |:-------|:----|:---|:---:| 70 | |`capacity`|`number`|Capacity of the BloomFilter|✓| 71 | |`fp-probability`|`number`|Probability of false-positive|✓| 72 | |`format`|`string`|Format of the BloomFilter such as `dcso-v1` or `poppy-v2`|✓| 73 | |`match-count`|`number`|Number of count match to confirm if it's a positive match. Default is `1`.|‐| 74 | 75 | ##### List of known `bloomfilter` format 76 | 77 | |Name|Description| 78 | |:-------|:----| 79 | |`dcso-v1`|[DCSO BloomFilter](https://github.com/DCSO/bloom) using 64-bit FNV-1 hash function.| 80 | |`poppy-v2`|[Poppy](https://github.com/hashlookup/poppy) using 64-bit with wyHash.| 81 | 82 | #### Format type `misp-feed-cache` 83 | 84 | ### Sample 85 | 86 | ~~~~json 87 | { 88 | "algorithm": "Blake2", 89 | "format": [ 90 | { 91 | "bloomfilter": { 92 | "capacity": 10000, 93 | "format": "dcso-v1", 94 | "fp-probability": 0.001 95 | } 96 | }, 97 | { 98 | "misp-feed-cache": {} 99 | } 100 | ], 101 | "canonicalization-format": ".lower", 102 | "description": "List of Tor hidden services containing child sexual abuse material (CSAM).", 103 | "generated-timestamp": 1700731642, 104 | "keyid": "tor-csam-lea", 105 | "misp-attribute-types": [ 106 | "text", 107 | "url", 108 | "link" 109 | ], 110 | "version": 1 111 | } 112 | 113 | ~~~~ 114 | 115 | ### Feed format 116 | 117 | The feed format is composed of a directory with the following structure: 118 | 119 | - `private-search-set.pss` - Private search as a standalone file. `OneOfrequired` 120 | - `private-search-set.json` - Meta data of the private search file. `required` 121 | - `private-search-set.bloom` - Bloomfilter file of the pss set. `OneOfrequired` 122 | 123 | Those two files can be included in a MISP feed format export. The feed can contain a single Bloom filter set along with meta-data or a hash list file with the hash values or even both files with the meta-data. 124 | 125 | ### MISP Object template 126 | 127 | A private-search-set MISP oject template will be created to be able to share PSS via MISP. 128 | 129 | -------------------------------------------------------------------------------- /assets/first-cti-pss-circl.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/assets/first-cti-pss-circl.pdf -------------------------------------------------------------------------------- /assets/firstcti2024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/assets/firstcti2024.png -------------------------------------------------------------------------------- /doc/diagram/pss-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/doc/diagram/pss-overview.png -------------------------------------------------------------------------------- /doc/diagram/pss-tor-safe-browsing/PSS-tor-safe-browsing.excalidraw: -------------------------------------------------------------------------------- 1 | { 2 | "type": "excalidraw", 3 | "version": 2, 4 | "source": "https://excalidraw.com", 5 | "elements": [ 6 | { 7 | "id": "XxDeHtNvBATUfDa7hb7TP", 8 | "type": "arrow", 9 | "x": 814.8916625976562, 10 | "y": 735.5, 11 | "width": 232, 12 | "height": 86, 13 | "angle": 0, 14 | "strokeColor": "#1e1e1e", 15 | "backgroundColor": "#ffffff", 16 | "fillStyle": "solid", 17 | "strokeWidth": 2, 18 | "strokeStyle": "solid", 19 | "roughness": 1, 20 | "opacity": 100, 21 | "groupIds": [], 22 | "frameId": null, 23 | "roundness": { 24 | "type": 2 25 | }, 26 | "seed": 1612627328, 27 | "version": 166, 28 | "versionNonce": 601221760, 29 | "isDeleted": false, 30 | "boundElements": null, 31 | "updated": 1712910507714, 32 | "link": null, 33 | "locked": false, 34 | "points": [ 35 | [ 36 | 0, 37 | 0 38 | ], 39 | [ 40 | -140, 41 | -20 42 | ], 43 | [ 44 | -232, 45 | -86 46 | ] 47 | ], 48 | "lastCommittedPoint": null, 49 | "startBinding": null, 50 | "endBinding": null, 51 | "startArrowhead": null, 52 | "endArrowhead": "arrow" 53 | }, 54 | { 55 | "type": "line", 56 | "version": 1453, 57 | "versionNonce": 122985856, 58 | "isDeleted": false, 59 | "id": "WOachrRHmD3L-LYK9_5Y6", 60 | "fillStyle": "solid", 61 | "strokeWidth": 2, 62 | "strokeStyle": "solid", 63 | "roughness": 1, 64 | "opacity": 100, 65 | "angle": 0, 66 | "x": 531.2135586478712, 67 | "y": 697.8612748916881, 68 | "strokeColor": "#000000", 69 | "backgroundColor": "#fa5252", 70 | "width": 54.65645735125227, 71 | "height": 49.427311113762016, 72 | "seed": 19461553, 73 | "groupIds": [ 74 | "zsVDcUmxfxNvQ39p_Qbl3" 75 | ], 76 | "frameId": null, 77 | "roundness": { 78 | "type": 2 79 | }, 80 | "boundElements": [], 81 | "updated": 1712910231592, 82 | "link": null, 83 | "locked": false, 84 | "startBinding": null, 85 | "endBinding": null, 86 | "lastCommittedPoint": null, 87 | "startArrowhead": null, 88 | "endArrowhead": null, 89 | "points": [ 90 | [ 91 | 0, 92 | 0 93 | ], 94 | [ 95 | 27.328228675626136, 96 | 0 97 | ], 98 | [ 99 | 27.328228675626136, 100 | -29.942577279799533 101 | ], 102 | [ 103 | 19.36291719077515, 104 | -42.38165601765725 105 | ], 106 | [ 107 | 1.3584014185758928, 108 | -49.427311113762016 109 | ], 110 | [ 111 | -19.541683683918148, 112 | -41.55501884612003 113 | ], 114 | [ 115 | -26.608029873842145, 116 | -28.592972329645455 117 | ], 118 | [ 119 | -27.328228675626136, 120 | 0 121 | ], 122 | [ 123 | 0, 124 | 0 125 | ] 126 | ] 127 | }, 128 | { 129 | "type": "rectangle", 130 | "version": 1029, 131 | "versionNonce": 1038413184, 132 | "isDeleted": false, 133 | "id": "uT2GWoD48tf6epHLThsca", 134 | "fillStyle": "solid", 135 | "strokeWidth": 2, 136 | "strokeStyle": "solid", 137 | "roughness": 1, 138 | "opacity": 100, 139 | "angle": 0, 140 | "x": 494.3340767791122, 141 | "y": 669.2137917534682, 142 | "strokeColor": "#000000", 143 | "backgroundColor": "#ced4da", 144 | "width": 73.43160549707883, 145 | "height": 48.95440366471922, 146 | "seed": 1086396305, 147 | "groupIds": [ 148 | "imAbhCwxx6lWb68zntQwg", 149 | "zsVDcUmxfxNvQ39p_Qbl3" 150 | ], 151 | "frameId": null, 152 | "roundness": null, 153 | "boundElements": [], 154 | "updated": 1712910231592, 155 | "link": null, 156 | "locked": false 157 | }, 158 | { 159 | "type": "ellipse", 160 | "version": 745, 161 | "versionNonce": 1575697792, 162 | "isDeleted": false, 163 | "id": "_HOu4dJmhsOEFo3d87OtX", 164 | "fillStyle": "solid", 165 | "strokeWidth": 2, 166 | "strokeStyle": "solid", 167 | "roughness": 1, 168 | "opacity": 100, 169 | "angle": 0, 170 | "x": 526.9733960773451, 171 | "y": 689.6145101355212, 172 | "strokeColor": "#000000", 173 | "backgroundColor": "#ffffff", 174 | "width": 8.152966900613066, 175 | "height": 8.152966900613066, 176 | "seed": 12189041, 177 | "groupIds": [ 178 | "imAbhCwxx6lWb68zntQwg", 179 | "zsVDcUmxfxNvQ39p_Qbl3" 180 | ], 181 | "frameId": null, 182 | "roundness": null, 183 | "boundElements": [], 184 | "updated": 1712910231592, 185 | "link": null, 186 | "locked": false 187 | }, 188 | { 189 | "type": "line", 190 | "version": 2095, 191 | "versionNonce": 1218940288, 192 | "isDeleted": false, 193 | "id": "AA4Jcxvqp--Oq5rxEBbv5", 194 | "fillStyle": "solid", 195 | "strokeWidth": 2, 196 | "strokeStyle": "solid", 197 | "roughness": 1, 198 | "opacity": 100, 199 | "angle": 0, 200 | "x": 494.0857275279563, 201 | "y": 714.0695227740624, 202 | "strokeColor": "#000000", 203 | "backgroundColor": "#ced4da", 204 | "width": 83.49394657419327, 205 | "height": 7.473670898671887, 206 | "seed": 5973841, 207 | "groupIds": [ 208 | "imAbhCwxx6lWb68zntQwg", 209 | "zsVDcUmxfxNvQ39p_Qbl3" 210 | ], 211 | "frameId": null, 212 | "roundness": { 213 | "type": 2 214 | }, 215 | "boundElements": [], 216 | "updated": 1712910231592, 217 | "link": null, 218 | "locked": false, 219 | "startBinding": null, 220 | "endBinding": null, 221 | "lastCommittedPoint": null, 222 | "startArrowhead": null, 223 | "endArrowhead": null, 224 | "points": [ 225 | [ 226 | 0, 227 | 0 228 | ], 229 | [ 230 | -4.98515929759198, 231 | 1.9251768794252322 232 | ], 233 | [ 234 | 1.687952724409015, 235 | 5.1419880118885715 236 | ], 237 | [ 238 | 71.78898891715771, 239 | 6.574859317330791 240 | ], 241 | [ 242 | 78.5087872766013, 243 | 2.6963597159786614 244 | ], 245 | [ 246 | 73.23386934933681, 247 | -0.8988115813410963 248 | ], 249 | [ 250 | 0, 251 | 0 252 | ] 253 | ] 254 | }, 255 | { 256 | "type": "ellipse", 257 | "version": 928, 258 | "versionNonce": 928636288, 259 | "isDeleted": false, 260 | "id": "O1Ri10TXZKR2AoxJ4WpnT", 261 | "fillStyle": "solid", 262 | "strokeWidth": 2, 263 | "strokeStyle": "solid", 264 | "roughness": 1, 265 | "opacity": 100, 266 | "angle": 0, 267 | "x": 507.01045539858205, 268 | "y": 603.5334147076572, 269 | "strokeColor": "#000000", 270 | "backgroundColor": "#ffffff", 271 | "width": 48.95440366471922, 272 | "height": 48.95440366471922, 273 | "seed": 704386353, 274 | "groupIds": [ 275 | "FqtM5aEYSYho4QyOeI_OH", 276 | "zsVDcUmxfxNvQ39p_Qbl3" 277 | ], 278 | "frameId": null, 279 | "roundness": null, 280 | "boundElements": [], 281 | "updated": 1712910231592, 282 | "link": null, 283 | "locked": false 284 | }, 285 | { 286 | "type": "line", 287 | "version": 1176, 288 | "versionNonce": 994192768, 289 | "isDeleted": false, 290 | "id": "dbX8FIQ3qXXFZVf6444oK", 291 | "fillStyle": "solid", 292 | "strokeWidth": 2, 293 | "strokeStyle": "solid", 294 | "roughness": 1, 295 | "opacity": 100, 296 | "angle": 6.228364428824993, 297 | "x": 514.8263768034508, 298 | "y": 627.1002321049381, 299 | "strokeColor": "#000000", 300 | "backgroundColor": "#ffffff", 301 | "width": 10.651180151949859, 302 | "height": 6.847128326549817, 303 | "seed": 822363921, 304 | "groupIds": [ 305 | "FqtM5aEYSYho4QyOeI_OH", 306 | "zsVDcUmxfxNvQ39p_Qbl3" 307 | ], 308 | "frameId": null, 309 | "roundness": { 310 | "type": 2 311 | }, 312 | "boundElements": [], 313 | "updated": 1712910231592, 314 | "link": null, 315 | "locked": false, 316 | "startBinding": null, 317 | "endBinding": null, 318 | "lastCommittedPoint": null, 319 | "startArrowhead": null, 320 | "endArrowhead": null, 321 | "points": [ 322 | [ 323 | 0, 324 | 0 325 | ], 326 | [ 327 | 1.7300637594256403, 328 | -4.197246012243889 329 | ], 330 | [ 331 | 5.8723596935509175, 332 | -6.847128326549817 333 | ], 334 | [ 335 | 8.94509772086767, 336 | -4.528977346204915 337 | ], 338 | [ 339 | 10.651180151949859, 340 | -0.8377747112548665 341 | ] 342 | ] 343 | }, 344 | { 345 | "type": "line", 346 | "version": 1239, 347 | "versionNonce": 1033928064, 348 | "isDeleted": false, 349 | "id": "fxeyP0vQclw7tzfVgZe29", 350 | "fillStyle": "solid", 351 | "strokeWidth": 2, 352 | "strokeStyle": "solid", 353 | "roughness": 1, 354 | "opacity": 100, 355 | "angle": 6.228364428824993, 356 | "x": 535.5525974805289, 357 | "y": 627.2843723716351, 358 | "strokeColor": "#000000", 359 | "backgroundColor": "#ffffff", 360 | "width": 10.651180151949859, 361 | "height": 6.847128326549817, 362 | "seed": 1877687537, 363 | "groupIds": [ 364 | "FqtM5aEYSYho4QyOeI_OH", 365 | "zsVDcUmxfxNvQ39p_Qbl3" 366 | ], 367 | "frameId": null, 368 | "roundness": { 369 | "type": 2 370 | }, 371 | "boundElements": [], 372 | "updated": 1712910231592, 373 | "link": null, 374 | "locked": false, 375 | "startBinding": null, 376 | "endBinding": null, 377 | "lastCommittedPoint": null, 378 | "startArrowhead": null, 379 | "endArrowhead": null, 380 | "points": [ 381 | [ 382 | 0, 383 | 0 384 | ], 385 | [ 386 | 1.7300637594256403, 387 | -4.197246012243889 388 | ], 389 | [ 390 | 5.8723596935509175, 391 | -6.847128326549817 392 | ], 393 | [ 394 | 8.94509772086767, 395 | -4.528977346204915 396 | ], 397 | [ 398 | 10.651180151949859, 399 | -0.8377747112548665 400 | ] 401 | ] 402 | }, 403 | { 404 | "type": "line", 405 | "version": 1130, 406 | "versionNonce": 2142555520, 407 | "isDeleted": false, 408 | "id": "U1WF5EGFwuPTxvJLuA-ho", 409 | "fillStyle": "solid", 410 | "strokeWidth": 2, 411 | "strokeStyle": "solid", 412 | "roughness": 1, 413 | "opacity": 100, 414 | "angle": 0, 415 | "x": 519.9316623910681, 416 | "y": 637.2863277214279, 417 | "strokeColor": "#000000", 418 | "backgroundColor": "#ffffff", 419 | "width": 20.1816183679401, 420 | "height": 3.885234146418453, 421 | "seed": 104363729, 422 | "groupIds": [ 423 | "FqtM5aEYSYho4QyOeI_OH", 424 | "zsVDcUmxfxNvQ39p_Qbl3" 425 | ], 426 | "frameId": null, 427 | "roundness": { 428 | "type": 2 429 | }, 430 | "boundElements": [], 431 | "updated": 1712910231592, 432 | "link": null, 433 | "locked": false, 434 | "startBinding": null, 435 | "endBinding": null, 436 | "lastCommittedPoint": null, 437 | "startArrowhead": null, 438 | "endArrowhead": null, 439 | "points": [ 440 | [ 441 | 0, 442 | 0 443 | ], 444 | [ 445 | 9.615848471651368, 446 | 3.885234146418453 447 | ], 448 | [ 449 | 20.1816183679401, 450 | 1.170774363360044 451 | ] 452 | ] 453 | }, 454 | { 455 | "type": "line", 456 | "version": 957, 457 | "versionNonce": 448732544, 458 | "isDeleted": false, 459 | "id": "IwhKGES-gvWBMM0B_lunP", 460 | "fillStyle": "solid", 461 | "strokeWidth": 2, 462 | "strokeStyle": "solid", 463 | "roughness": 1, 464 | "opacity": 100, 465 | "angle": 0, 466 | "x": 530.5494911836574, 467 | "y": 601.5804260716045, 468 | "strokeColor": "#000000", 469 | "backgroundColor": "#ffffff", 470 | "width": 8.515145651124511, 471 | "height": 3.947472929886246, 472 | "seed": 914584753, 473 | "groupIds": [ 474 | "FqtM5aEYSYho4QyOeI_OH", 475 | "zsVDcUmxfxNvQ39p_Qbl3" 476 | ], 477 | "frameId": null, 478 | "roundness": { 479 | "type": 2 480 | }, 481 | "boundElements": [], 482 | "updated": 1712910231592, 483 | "link": null, 484 | "locked": false, 485 | "startBinding": null, 486 | "endBinding": null, 487 | "lastCommittedPoint": null, 488 | "startArrowhead": null, 489 | "endArrowhead": null, 490 | "points": [ 491 | [ 492 | 0, 493 | 0 494 | ], 495 | [ 496 | -8.515145651124511, 497 | -3.947472929886246 498 | ] 499 | ] 500 | }, 501 | { 502 | "type": "line", 503 | "version": 1016, 504 | "versionNonce": 2147446144, 505 | "isDeleted": false, 506 | "id": "UeajE_XvlMOk5j4DFZWWK", 507 | "fillStyle": "solid", 508 | "strokeWidth": 2, 509 | "strokeStyle": "solid", 510 | "roughness": 1, 511 | "opacity": 100, 512 | "angle": 0, 513 | "x": 532.2500179144015, 514 | "y": 601.0333374292196, 515 | "strokeColor": "#000000", 516 | "backgroundColor": "#ffffff", 517 | "width": 15.029383260869983, 518 | "height": 1.4584180249026597, 519 | "seed": 74692241, 520 | "groupIds": [ 521 | "FqtM5aEYSYho4QyOeI_OH", 522 | "zsVDcUmxfxNvQ39p_Qbl3" 523 | ], 524 | "frameId": null, 525 | "roundness": { 526 | "type": 2 527 | }, 528 | "boundElements": [], 529 | "updated": 1712910231592, 530 | "link": null, 531 | "locked": false, 532 | "startBinding": null, 533 | "endBinding": null, 534 | "lastCommittedPoint": null, 535 | "startArrowhead": null, 536 | "endArrowhead": null, 537 | "points": [ 538 | [ 539 | 0, 540 | 0 541 | ], 542 | [ 543 | 6.15542029137036, 544 | -1.4003321663419646 545 | ], 546 | [ 547 | 15.029383260869983, 548 | -1.4584180249026597 549 | ] 550 | ] 551 | }, 552 | { 553 | "type": "line", 554 | "version": 995, 555 | "versionNonce": 2025176448, 556 | "isDeleted": false, 557 | "id": "MxMgw-wmxTmwqwfNYS_Xc", 558 | "fillStyle": "solid", 559 | "strokeWidth": 2, 560 | "strokeStyle": "solid", 561 | "roughness": 1, 562 | "opacity": 100, 563 | "angle": 0, 564 | "x": 529.1940559233951, 565 | "y": 602.5171918468393, 566 | "strokeColor": "#000000", 567 | "backgroundColor": "#ffffff", 568 | "width": 16.03666130004024, 569 | "height": 1.299870475802369, 570 | "seed": 314621041, 571 | "groupIds": [ 572 | "FqtM5aEYSYho4QyOeI_OH", 573 | "zsVDcUmxfxNvQ39p_Qbl3" 574 | ], 575 | "frameId": null, 576 | "roundness": { 577 | "type": 2 578 | }, 579 | "boundElements": [], 580 | "updated": 1712910231592, 581 | "link": null, 582 | "locked": false, 583 | "startBinding": null, 584 | "endBinding": null, 585 | "lastCommittedPoint": null, 586 | "startArrowhead": null, 587 | "endArrowhead": null, 588 | "points": [ 589 | [ 590 | 0, 591 | 0 592 | ], 593 | [ 594 | -9.399855914802584, 595 | -0.6467955669126702 596 | ], 597 | [ 598 | -16.03666130004024, 599 | 0.6530749088896988 600 | ] 601 | ] 602 | }, 603 | { 604 | "type": "rectangle", 605 | "version": 1736, 606 | "versionNonce": 481938816, 607 | "isDeleted": false, 608 | "id": "jslh0O8sPlqEClZq7LKt7", 609 | "fillStyle": "solid", 610 | "strokeWidth": 4, 611 | "strokeStyle": "solid", 612 | "roughness": 0, 613 | "opacity": 100, 614 | "angle": 5.5800832337787245, 615 | "x": 1241.7134140715443, 616 | "y": 614.718158659573, 617 | "strokeColor": "#000", 618 | "backgroundColor": "#8da7b6", 619 | "width": 5.57943037374849, 620 | "height": 23.023186577208644, 621 | "seed": 1077315199, 622 | "groupIds": [ 623 | "5voitlDDXgNwFzlxQJ1Mv" 624 | ], 625 | "frameId": null, 626 | "roundness": { 627 | "type": 1 628 | }, 629 | "boundElements": [], 630 | "updated": 1712910328771, 631 | "link": null, 632 | "locked": false 633 | }, 634 | { 635 | "type": "ellipse", 636 | "version": 1351, 637 | "versionNonce": 1327766912, 638 | "isDeleted": false, 639 | "id": "Znr3cV_uxGagjAwiN9smI", 640 | "fillStyle": "solid", 641 | "strokeWidth": 4, 642 | "strokeStyle": "solid", 643 | "roughness": 0, 644 | "opacity": 100, 645 | "angle": 0, 646 | "x": 1218.9495185445949, 647 | "y": 598.4559825044851, 648 | "strokeColor": "#000", 649 | "backgroundColor": "#c5e8fa", 650 | "width": 28.545972970178294, 651 | "height": 28.545972970178294, 652 | "seed": 700407455, 653 | "groupIds": [ 654 | "5voitlDDXgNwFzlxQJ1Mv" 655 | ], 656 | "frameId": null, 657 | "roundness": null, 658 | "boundElements": [], 659 | "updated": 1712910328771, 660 | "link": null, 661 | "locked": false 662 | }, 663 | { 664 | "type": "line", 665 | "version": 2053, 666 | "versionNonce": 1606708608, 667 | "isDeleted": false, 668 | "id": "7UU7TM2wNYGOEJYsfmPAX", 669 | "fillStyle": "solid", 670 | "strokeWidth": 4, 671 | "strokeStyle": "solid", 672 | "roughness": 0, 673 | "opacity": 100, 674 | "angle": 0, 675 | "x": 1235.753954137039, 676 | "y": 603.5313408386027, 677 | "strokeColor": "#000", 678 | "backgroundColor": "#c5e8fa", 679 | "width": 6.705052254566622, 680 | "height": 11.778855553107247, 681 | "seed": 2025337535, 682 | "groupIds": [ 683 | "5voitlDDXgNwFzlxQJ1Mv" 684 | ], 685 | "frameId": null, 686 | "roundness": { 687 | "type": 2 688 | }, 689 | "boundElements": [], 690 | "updated": 1712910328771, 691 | "link": null, 692 | "locked": false, 693 | "startBinding": null, 694 | "endBinding": null, 695 | "lastCommittedPoint": null, 696 | "startArrowhead": null, 697 | "endArrowhead": null, 698 | "points": [ 699 | [ 700 | 0, 701 | 0 702 | ], 703 | [ 704 | 3.9321799648410884, 705 | 2.0344095098468937 706 | ], 707 | [ 708 | 6.705052254566622, 709 | 6.761943004768085 710 | ], 711 | [ 712 | 6.427670413161153, 713 | 11.778855553107247 714 | ] 715 | ] 716 | }, 717 | { 718 | "type": "text", 719 | "version": 236, 720 | "versionNonce": 540334720, 721 | "isDeleted": false, 722 | "id": "73u_6auZApSAddc6iw_FX", 723 | "fillStyle": "solid", 724 | "strokeWidth": 2, 725 | "strokeStyle": "solid", 726 | "roughness": 1, 727 | "opacity": 100, 728 | "angle": 0, 729 | "x": 736, 730 | "y": 244, 731 | "strokeColor": "#1e1e1e", 732 | "backgroundColor": "transparent", 733 | "width": 278.2166748046875, 734 | "height": 25, 735 | "seed": 108354347, 736 | "groupIds": [], 737 | "frameId": null, 738 | "roundness": null, 739 | "boundElements": [], 740 | "updated": 1712910604232, 741 | "link": null, 742 | "locked": false, 743 | "fontSize": 20, 744 | "fontFamily": 1, 745 | "text": "Tor Safe Browsing with PSS", 746 | "textAlign": "left", 747 | "verticalAlign": "top", 748 | "containerId": null, 749 | "originalText": "Tor Safe Browsing with PSS", 750 | "lineHeight": 1.25 751 | }, 752 | { 753 | "type": "rectangle", 754 | "version": 3372, 755 | "versionNonce": 332008832, 756 | "isDeleted": false, 757 | "id": "V6jZTQsUYoN2mn4Ag-kVh", 758 | "fillStyle": "solid", 759 | "strokeWidth": 4, 760 | "strokeStyle": "solid", 761 | "roughness": 1, 762 | "opacity": 100, 763 | "angle": 0, 764 | "x": 1384.02663883873, 765 | "y": 532.8150514621343, 766 | "strokeColor": "#000000", 767 | "backgroundColor": "#eebfd9", 768 | "width": 87.85825103183927, 769 | "height": 119.73315199366137, 770 | "seed": 683172159, 771 | "groupIds": [ 772 | "vMcE5u7k15zDiZan5-a7z", 773 | "kHKq_apePMJvI0Tuau80Y" 774 | ], 775 | "frameId": null, 776 | "roundness": null, 777 | "boundElements": [ 778 | { 779 | "id": "TIUy5lsVpFzE_KRGAXNR3", 780 | "type": "arrow" 781 | } 782 | ], 783 | "updated": 1712910864944, 784 | "link": null, 785 | "locked": false 786 | }, 787 | { 788 | "type": "rectangle", 789 | "version": 2809, 790 | "versionNonce": 933625216, 791 | "isDeleted": false, 792 | "id": "AJdHTaZCZxpNdxWnQRxYc", 793 | "fillStyle": "solid", 794 | "strokeWidth": 4, 795 | "strokeStyle": "solid", 796 | "roughness": 1, 797 | "opacity": 100, 798 | "angle": 0, 799 | "x": 1422.63742366127, 800 | "y": 546.4061494398103, 801 | "strokeColor": "#000000", 802 | "backgroundColor": "#fff", 803 | "width": 58.3359375, 804 | "height": 35, 805 | "seed": 1119347039, 806 | "groupIds": [ 807 | "vMcE5u7k15zDiZan5-a7z", 808 | "kHKq_apePMJvI0Tuau80Y" 809 | ], 810 | "frameId": null, 811 | "roundness": null, 812 | "boundElements": [ 813 | { 814 | "type": "text", 815 | "id": "B3PvN4rFC_ujKyZF0KebX" 816 | } 817 | ], 818 | "updated": 1712910784258, 819 | "link": null, 820 | "locked": false 821 | }, 822 | { 823 | "type": "text", 824 | "version": 650, 825 | "versionNonce": 487214464, 826 | "isDeleted": false, 827 | "id": "B3PvN4rFC_ujKyZF0KebX", 828 | "fillStyle": "solid", 829 | "strokeWidth": 2, 830 | "strokeStyle": "solid", 831 | "roughness": 1, 832 | "opacity": 100, 833 | "angle": 0, 834 | "x": 1433.0303927927398, 835 | "y": 551.4061494398103, 836 | "strokeColor": "#1e1e1e", 837 | "backgroundColor": "transparent", 838 | "width": 37.54999923706055, 839 | "height": 25, 840 | "seed": 1594229329, 841 | "groupIds": [ 842 | "vMcE5u7k15zDiZan5-a7z", 843 | "kHKq_apePMJvI0Tuau80Y" 844 | ], 845 | "frameId": null, 846 | "roundness": null, 847 | "boundElements": [], 848 | "updated": 1712910784258, 849 | "link": null, 850 | "locked": false, 851 | "fontSize": 20, 852 | "fontFamily": 1, 853 | "text": "PSS", 854 | "textAlign": "center", 855 | "verticalAlign": "middle", 856 | "containerId": "AJdHTaZCZxpNdxWnQRxYc", 857 | "originalText": "PSS", 858 | "lineHeight": 1.25 859 | }, 860 | { 861 | "type": "rectangle", 862 | "version": 2096, 863 | "versionNonce": 1902419328, 864 | "isDeleted": false, 865 | "id": "N3rXl6_shO-04LCURlt9i", 866 | "fillStyle": "solid", 867 | "strokeWidth": 4, 868 | "strokeStyle": "solid", 869 | "roughness": 0, 870 | "opacity": 100, 871 | "angle": 0, 872 | "x": 1397.833277948665, 873 | "y": 598.7664826268594, 874 | "strokeColor": "#000", 875 | "backgroundColor": "#aedaf5", 876 | "width": 38.34765817030507, 877 | "height": 37.083848102072274, 878 | "seed": 1868372703, 879 | "groupIds": [ 880 | "JK52RwLOJuviR9mO8Uw9m", 881 | "vMcE5u7k15zDiZan5-a7z", 882 | "kHKq_apePMJvI0Tuau80Y" 883 | ], 884 | "frameId": null, 885 | "roundness": null, 886 | "boundElements": [], 887 | "updated": 1712910784258, 888 | "link": null, 889 | "locked": false 890 | }, 891 | { 892 | "type": "ellipse", 893 | "version": 2579, 894 | "versionNonce": 1710550400, 895 | "isDeleted": false, 896 | "id": "e-NQOHyssdWvdrP_ubz0v", 897 | "fillStyle": "solid", 898 | "strokeWidth": 4, 899 | "strokeStyle": "solid", 900 | "roughness": 0, 901 | "opacity": 100, 902 | "angle": 0, 903 | "x": 1397.7770026525964, 904 | "y": 628.988708466303, 905 | "strokeColor": "#000", 906 | "backgroundColor": "#aedaf5", 907 | "width": 38.39334618154158, 908 | "height": 14.851689701140025, 909 | "seed": 1943299839, 910 | "groupIds": [ 911 | "JK52RwLOJuviR9mO8Uw9m", 912 | "vMcE5u7k15zDiZan5-a7z", 913 | "kHKq_apePMJvI0Tuau80Y" 914 | ], 915 | "frameId": null, 916 | "roundness": null, 917 | "boundElements": [], 918 | "updated": 1712910784258, 919 | "link": null, 920 | "locked": false 921 | }, 922 | { 923 | "type": "ellipse", 924 | "version": 3080, 925 | "versionNonce": 66796928, 926 | "isDeleted": false, 927 | "id": "uH-ASH0QQCkZpoHamf8iq", 928 | "fillStyle": "solid", 929 | "strokeWidth": 4, 930 | "strokeStyle": "solid", 931 | "roughness": 0, 932 | "opacity": 100, 933 | "angle": 0, 934 | "x": 1397.7997949720443, 935 | "y": 619.3984545115432, 936 | "strokeColor": "#000", 937 | "backgroundColor": "#aedaf5", 938 | "width": 38.39334618154158, 939 | "height": 14.851689701140025, 940 | "seed": 1607282463, 941 | "groupIds": [ 942 | "JK52RwLOJuviR9mO8Uw9m", 943 | "vMcE5u7k15zDiZan5-a7z", 944 | "kHKq_apePMJvI0Tuau80Y" 945 | ], 946 | "frameId": null, 947 | "roundness": null, 948 | "boundElements": [], 949 | "updated": 1712910784258, 950 | "link": null, 951 | "locked": false 952 | }, 953 | { 954 | "type": "ellipse", 955 | "version": 2890, 956 | "versionNonce": 750226816, 957 | "isDeleted": false, 958 | "id": "25EbGrY1yZopnLiHkyfW0", 959 | "fillStyle": "solid", 960 | "strokeWidth": 4, 961 | "strokeStyle": "solid", 962 | "roughness": 0, 963 | "opacity": 100, 964 | "angle": 0, 965 | "x": 1397.7825313817784, 966 | "y": 609.9851451795173, 967 | "strokeColor": "#000", 968 | "backgroundColor": "#aedaf5", 969 | "width": 38.39334618154158, 970 | "height": 14.851689701140025, 971 | "seed": 1035465535, 972 | "groupIds": [ 973 | "JK52RwLOJuviR9mO8Uw9m", 974 | "vMcE5u7k15zDiZan5-a7z", 975 | "kHKq_apePMJvI0Tuau80Y" 976 | ], 977 | "frameId": null, 978 | "roundness": null, 979 | "boundElements": [], 980 | "updated": 1712910784258, 981 | "link": null, 982 | "locked": false 983 | }, 984 | { 985 | "type": "ellipse", 986 | "version": 2478, 987 | "versionNonce": 426368384, 988 | "isDeleted": false, 989 | "id": "lFKKnmTkKtQU8ZSiB_qeC", 990 | "fillStyle": "solid", 991 | "strokeWidth": 4, 992 | "strokeStyle": "solid", 993 | "roughness": 0, 994 | "opacity": 100, 995 | "angle": 0, 996 | "x": 1397.829651165862, 997 | "y": 601.3760100378418, 998 | "strokeColor": "#000", 999 | "backgroundColor": "#aedaf5", 1000 | "width": 38.39334618154158, 1001 | "height": 14.851689701140025, 1002 | "seed": 1979003743, 1003 | "groupIds": [ 1004 | "JK52RwLOJuviR9mO8Uw9m", 1005 | "vMcE5u7k15zDiZan5-a7z", 1006 | "kHKq_apePMJvI0Tuau80Y" 1007 | ], 1008 | "frameId": null, 1009 | "roundness": null, 1010 | "boundElements": [], 1011 | "updated": 1712910784258, 1012 | "link": null, 1013 | "locked": false 1014 | }, 1015 | { 1016 | "type": "ellipse", 1017 | "version": 2715, 1018 | "versionNonce": 1532112256, 1019 | "isDeleted": false, 1020 | "id": "PquJIK6K3vblf0sgLqrK7", 1021 | "fillStyle": "solid", 1022 | "strokeWidth": 4, 1023 | "strokeStyle": "solid", 1024 | "roughness": 0, 1025 | "opacity": 100, 1026 | "angle": 0, 1027 | "x": 1397.8235969120828, 1028 | "y": 592.159601832557, 1029 | "strokeColor": "#000", 1030 | "backgroundColor": "#dff3fd", 1031 | "width": 38.39334618154158, 1032 | "height": 14.851689701140025, 1033 | "seed": 282423167, 1034 | "groupIds": [ 1035 | "JK52RwLOJuviR9mO8Uw9m", 1036 | "vMcE5u7k15zDiZan5-a7z", 1037 | "kHKq_apePMJvI0Tuau80Y" 1038 | ], 1039 | "frameId": null, 1040 | "roundness": null, 1041 | "boundElements": [], 1042 | "updated": 1712910784258, 1043 | "link": null, 1044 | "locked": false 1045 | }, 1046 | { 1047 | "type": "rectangle", 1048 | "version": 2090, 1049 | "versionNonce": 1538293120, 1050 | "isDeleted": false, 1051 | "id": "cnwH2TATQX7nMCvPeY5d8", 1052 | "fillStyle": "solid", 1053 | "strokeWidth": 4, 1054 | "strokeStyle": "solid", 1055 | "roughness": 0, 1056 | "opacity": 100, 1057 | "angle": 0, 1058 | "x": 1411.5602217856895, 1059 | "y": 612.1767598445502, 1060 | "strokeColor": "#000", 1061 | "backgroundColor": "#aedaf5", 1062 | "width": 38.34765817030507, 1063 | "height": 37.083848102072274, 1064 | "seed": 2064143775, 1065 | "groupIds": [ 1066 | "vBnSzBNYNqdFF3f4urW5l", 1067 | "kHKq_apePMJvI0Tuau80Y" 1068 | ], 1069 | "frameId": null, 1070 | "roundness": null, 1071 | "boundElements": [], 1072 | "updated": 1712910784258, 1073 | "link": null, 1074 | "locked": false 1075 | }, 1076 | { 1077 | "type": "ellipse", 1078 | "version": 2574, 1079 | "versionNonce": 2132175488, 1080 | "isDeleted": false, 1081 | "id": "bw6yd2uTX3558XN8RBku7", 1082 | "fillStyle": "solid", 1083 | "strokeWidth": 4, 1084 | "strokeStyle": "solid", 1085 | "roughness": 0, 1086 | "opacity": 100, 1087 | "angle": 0, 1088 | "x": 1411.5039464896208, 1089 | "y": 642.3989856839937, 1090 | "strokeColor": "#000", 1091 | "backgroundColor": "#aedaf5", 1092 | "width": 38.39334618154158, 1093 | "height": 14.851689701140025, 1094 | "seed": 1137330623, 1095 | "groupIds": [ 1096 | "vBnSzBNYNqdFF3f4urW5l", 1097 | "kHKq_apePMJvI0Tuau80Y" 1098 | ], 1099 | "frameId": null, 1100 | "roundness": null, 1101 | "boundElements": [ 1102 | { 1103 | "id": "GNL65DN9iRrPXe6FJiteq", 1104 | "type": "arrow" 1105 | } 1106 | ], 1107 | "updated": 1712910821666, 1108 | "link": null, 1109 | "locked": false 1110 | }, 1111 | { 1112 | "type": "ellipse", 1113 | "version": 3076, 1114 | "versionNonce": 1959730560, 1115 | "isDeleted": false, 1116 | "id": "6cJlzODjl28I4CfWRh2C1", 1117 | "fillStyle": "solid", 1118 | "strokeWidth": 4, 1119 | "strokeStyle": "solid", 1120 | "roughness": 0, 1121 | "opacity": 100, 1122 | "angle": 0, 1123 | "x": 1411.5267388090688, 1124 | "y": 632.8087317292338, 1125 | "strokeColor": "#000", 1126 | "backgroundColor": "#aedaf5", 1127 | "width": 38.39334618154158, 1128 | "height": 14.851689701140025, 1129 | "seed": 1685633503, 1130 | "groupIds": [ 1131 | "vBnSzBNYNqdFF3f4urW5l", 1132 | "kHKq_apePMJvI0Tuau80Y" 1133 | ], 1134 | "frameId": null, 1135 | "roundness": null, 1136 | "boundElements": [], 1137 | "updated": 1712910784258, 1138 | "link": null, 1139 | "locked": false 1140 | }, 1141 | { 1142 | "type": "ellipse", 1143 | "version": 2884, 1144 | "versionNonce": 403664256, 1145 | "isDeleted": false, 1146 | "id": "4Xn11GrfD5LmwIrmVJTK1", 1147 | "fillStyle": "solid", 1148 | "strokeWidth": 4, 1149 | "strokeStyle": "solid", 1150 | "roughness": 0, 1151 | "opacity": 100, 1152 | "angle": 0, 1153 | "x": 1411.509475218803, 1154 | "y": 623.395422397208, 1155 | "strokeColor": "#000", 1156 | "backgroundColor": "#aedaf5", 1157 | "width": 38.39334618154158, 1158 | "height": 14.851689701140025, 1159 | "seed": 572794367, 1160 | "groupIds": [ 1161 | "vBnSzBNYNqdFF3f4urW5l", 1162 | "kHKq_apePMJvI0Tuau80Y" 1163 | ], 1164 | "frameId": null, 1165 | "roundness": null, 1166 | "boundElements": [], 1167 | "updated": 1712910784258, 1168 | "link": null, 1169 | "locked": false 1170 | }, 1171 | { 1172 | "type": "ellipse", 1173 | "version": 2472, 1174 | "versionNonce": 247840128, 1175 | "isDeleted": false, 1176 | "id": "XYx0dBlkwh7ugwGgHmdDj", 1177 | "fillStyle": "solid", 1178 | "strokeWidth": 4, 1179 | "strokeStyle": "solid", 1180 | "roughness": 0, 1181 | "opacity": 100, 1182 | "angle": 0, 1183 | "x": 1411.5565950028865, 1184 | "y": 614.7862872555324, 1185 | "strokeColor": "#000", 1186 | "backgroundColor": "#aedaf5", 1187 | "width": 38.39334618154158, 1188 | "height": 14.851689701140025, 1189 | "seed": 1271729695, 1190 | "groupIds": [ 1191 | "vBnSzBNYNqdFF3f4urW5l", 1192 | "kHKq_apePMJvI0Tuau80Y" 1193 | ], 1194 | "frameId": null, 1195 | "roundness": null, 1196 | "boundElements": [], 1197 | "updated": 1712910784258, 1198 | "link": null, 1199 | "locked": false 1200 | }, 1201 | { 1202 | "type": "ellipse", 1203 | "version": 2709, 1204 | "versionNonce": 2050100608, 1205 | "isDeleted": false, 1206 | "id": "Xh-_rWKt2aGuDRuuJMC-v", 1207 | "fillStyle": "solid", 1208 | "strokeWidth": 4, 1209 | "strokeStyle": "solid", 1210 | "roughness": 0, 1211 | "opacity": 100, 1212 | "angle": 0, 1213 | "x": 1411.5505407491073, 1214 | "y": 605.5698790502477, 1215 | "strokeColor": "#000", 1216 | "backgroundColor": "#dff3fd", 1217 | "width": 38.39334618154158, 1218 | "height": 14.851689701140025, 1219 | "seed": 2086924863, 1220 | "groupIds": [ 1221 | "vBnSzBNYNqdFF3f4urW5l", 1222 | "kHKq_apePMJvI0Tuau80Y" 1223 | ], 1224 | "frameId": null, 1225 | "roundness": null, 1226 | "boundElements": [], 1227 | "updated": 1712910784258, 1228 | "link": null, 1229 | "locked": false 1230 | }, 1231 | { 1232 | "type": "rectangle", 1233 | "version": 927, 1234 | "versionNonce": 1883979136, 1235 | "isDeleted": false, 1236 | "id": "57_CJ-VEYaox04qCg8qCi", 1237 | "fillStyle": "solid", 1238 | "strokeWidth": 1, 1239 | "strokeStyle": "solid", 1240 | "roughness": 1, 1241 | "opacity": 100, 1242 | "angle": 0, 1243 | "x": 722.0176022073244, 1244 | "y": 373.23148305011114, 1245 | "strokeColor": "#000000", 1246 | "backgroundColor": "transparent", 1247 | "width": 345.09761836902214, 1248 | "height": 206.53703389977767, 1249 | "seed": 1336040150, 1250 | "groupIds": [ 1251 | "--lagioZikxzHg77RDsUN" 1252 | ], 1253 | "frameId": null, 1254 | "roundness": null, 1255 | "boundElements": [ 1256 | { 1257 | "id": "4ydMUZkreQLeF6TqMQbsQ", 1258 | "type": "arrow" 1259 | } 1260 | ], 1261 | "updated": 1712910351968, 1262 | "link": null, 1263 | "locked": false 1264 | }, 1265 | { 1266 | "type": "line", 1267 | "version": 711, 1268 | "versionNonce": 1907096192, 1269 | "isDeleted": false, 1270 | "id": "1EWtvWJyK9B4QC3KnJFx0", 1271 | "fillStyle": "solid", 1272 | "strokeWidth": 1, 1273 | "strokeStyle": "solid", 1274 | "roughness": 1, 1275 | "opacity": 100, 1276 | "angle": 0, 1277 | "x": 719.1150757071459, 1278 | "y": 405.15030984914006, 1279 | "strokeColor": "#000000", 1280 | "backgroundColor": "transparent", 1281 | "width": 347.68306508561955, 1282 | "height": 0, 1283 | "seed": 930910230, 1284 | "groupIds": [ 1285 | "--lagioZikxzHg77RDsUN" 1286 | ], 1287 | "frameId": null, 1288 | "roundness": { 1289 | "type": 2 1290 | }, 1291 | "boundElements": [], 1292 | "updated": 1712910226192, 1293 | "link": null, 1294 | "locked": false, 1295 | "startBinding": null, 1296 | "endBinding": null, 1297 | "lastCommittedPoint": null, 1298 | "startArrowhead": null, 1299 | "endArrowhead": null, 1300 | "points": [ 1301 | [ 1302 | 0, 1303 | 0 1304 | ], 1305 | [ 1306 | 347.68306508561955, 1307 | 0 1308 | ] 1309 | ] 1310 | }, 1311 | { 1312 | "type": "ellipse", 1313 | "version": 529, 1314 | "versionNonce": 1258745216, 1315 | "isDeleted": false, 1316 | "id": "v7_JKJZGpkN1mm6vc8_1Y", 1317 | "fillStyle": "solid", 1318 | "strokeWidth": 1, 1319 | "strokeStyle": "solid", 1320 | "roughness": 0, 1321 | "opacity": 100, 1322 | "angle": 0, 1323 | "x": 734.1286742800773, 1324 | "y": 384.7584172888347, 1325 | "strokeColor": "#000000", 1326 | "backgroundColor": "#fa5252", 1327 | "width": 13.497891275692947, 1328 | "height": 13.497891275692947, 1329 | "seed": 685645142, 1330 | "groupIds": [ 1331 | "--lagioZikxzHg77RDsUN" 1332 | ], 1333 | "frameId": null, 1334 | "roundness": null, 1335 | "boundElements": [], 1336 | "updated": 1712910226192, 1337 | "link": null, 1338 | "locked": false 1339 | }, 1340 | { 1341 | "type": "ellipse", 1342 | "version": 574, 1343 | "versionNonce": 2135468672, 1344 | "isDeleted": false, 1345 | "id": "L8Kojxm6hfLTJnCEs6yBW", 1346 | "fillStyle": "solid", 1347 | "strokeWidth": 1, 1348 | "strokeStyle": "solid", 1349 | "roughness": 0, 1350 | "opacity": 100, 1351 | "angle": 0, 1352 | "x": 761.8228053648602, 1353 | "y": 384.7584172888347, 1354 | "strokeColor": "#000000", 1355 | "backgroundColor": "#fab005", 1356 | "width": 13.497891275692947, 1357 | "height": 13.497891275692947, 1358 | "seed": 689701526, 1359 | "groupIds": [ 1360 | "--lagioZikxzHg77RDsUN" 1361 | ], 1362 | "frameId": null, 1363 | "roundness": null, 1364 | "boundElements": [], 1365 | "updated": 1712910226192, 1366 | "link": null, 1367 | "locked": false 1368 | }, 1369 | { 1370 | "type": "ellipse", 1371 | "version": 632, 1372 | "versionNonce": 1993162112, 1373 | "isDeleted": false, 1374 | "id": "BDyrz3IzSKqpxR7eBPU7M", 1375 | "fillStyle": "solid", 1376 | "strokeWidth": 1, 1377 | "strokeStyle": "solid", 1378 | "roughness": 0, 1379 | "opacity": 100, 1380 | "angle": 0, 1381 | "x": 790.7332183655735, 1382 | "y": 385.97469920476544, 1383 | "strokeColor": "#000000", 1384 | "backgroundColor": "#40c057", 1385 | "width": 13.497891275692947, 1386 | "height": 13.497891275692947, 1387 | "seed": 1256931286, 1388 | "groupIds": [ 1389 | "--lagioZikxzHg77RDsUN" 1390 | ], 1391 | "frameId": null, 1392 | "roundness": null, 1393 | "boundElements": [], 1394 | "updated": 1712910226192, 1395 | "link": null, 1396 | "locked": false 1397 | }, 1398 | { 1399 | "type": "image", 1400 | "version": 311, 1401 | "versionNonce": 365910656, 1402 | "isDeleted": false, 1403 | "id": "tfZ9zkIDADJ0tuIZJgTYM", 1404 | "fillStyle": "solid", 1405 | "strokeWidth": 2, 1406 | "strokeStyle": "solid", 1407 | "roughness": 1, 1408 | "opacity": 100, 1409 | "angle": 0, 1410 | "x": 819.8916625976562, 1411 | "y": 427.5, 1412 | "strokeColor": "transparent", 1413 | "backgroundColor": "transparent", 1414 | "width": 138.8853404023438, 1415 | "height": 138.8853404023438, 1416 | "seed": 832184714, 1417 | "groupIds": [ 1418 | "--lagioZikxzHg77RDsUN" 1419 | ], 1420 | "frameId": null, 1421 | "roundness": null, 1422 | "boundElements": [], 1423 | "updated": 1712910226192, 1424 | "link": null, 1425 | "locked": false, 1426 | "status": "saved", 1427 | "fileId": "91e708780a61d85dd587d22f067e5266db307c7f", 1428 | "scale": [ 1429 | 1, 1430 | 1 1431 | ] 1432 | }, 1433 | { 1434 | "type": "line", 1435 | "version": 738, 1436 | "versionNonce": 1967754624, 1437 | "isDeleted": false, 1438 | "id": "GXH0TTH3nLbL7YUq91MeP", 1439 | "fillStyle": "solid", 1440 | "strokeWidth": 1, 1441 | "strokeStyle": "solid", 1442 | "roughness": 1, 1443 | "opacity": 100, 1444 | "angle": 0, 1445 | "x": 719.5072056332772, 1446 | "y": 424.35616648349446, 1447 | "strokeColor": "#000000", 1448 | "backgroundColor": "transparent", 1449 | "width": 347.68306508561955, 1450 | "height": 0, 1451 | "seed": 1857456278, 1452 | "groupIds": [ 1453 | "--lagioZikxzHg77RDsUN" 1454 | ], 1455 | "frameId": null, 1456 | "roundness": { 1457 | "type": 2 1458 | }, 1459 | "boundElements": [], 1460 | "updated": 1712910226192, 1461 | "link": null, 1462 | "locked": false, 1463 | "startBinding": null, 1464 | "endBinding": null, 1465 | "lastCommittedPoint": null, 1466 | "startArrowhead": null, 1467 | "endArrowhead": null, 1468 | "points": [ 1469 | [ 1470 | 0, 1471 | 0 1472 | ], 1473 | [ 1474 | 347.68306508561955, 1475 | 0 1476 | ] 1477 | ] 1478 | }, 1479 | { 1480 | "type": "text", 1481 | "version": 196, 1482 | "versionNonce": 1999580544, 1483 | "isDeleted": false, 1484 | "id": "aRyu512MdMK-i7FQvljwO", 1485 | "fillStyle": "solid", 1486 | "strokeWidth": 2, 1487 | "strokeStyle": "solid", 1488 | "roughness": 1, 1489 | "opacity": 100, 1490 | "angle": 0, 1491 | "x": 724.7916641235352, 1492 | "y": 401, 1493 | "strokeColor": "#1e1e1e", 1494 | "backgroundColor": "transparent", 1495 | "width": 256.3500061035156, 1496 | "height": 25, 1497 | "seed": 812944768, 1498 | "groupIds": [ 1499 | "--lagioZikxzHg77RDsUN" 1500 | ], 1501 | "frameId": null, 1502 | "roundness": null, 1503 | "boundElements": [ 1504 | { 1505 | "id": "u6MHMEPk9IYyN6aUEoLUN", 1506 | "type": "arrow" 1507 | } 1508 | ], 1509 | "updated": 1712910341244, 1510 | "link": null, 1511 | "locked": false, 1512 | "fontSize": 20, 1513 | "fontFamily": 1, 1514 | "text": "http://verboten.onion.proxy", 1515 | "textAlign": "left", 1516 | "verticalAlign": "top", 1517 | "containerId": null, 1518 | "originalText": "http://verboten.onion.proxy", 1519 | "lineHeight": 1.25 1520 | }, 1521 | { 1522 | "type": "rectangle", 1523 | "version": 1008, 1524 | "versionNonce": 982174336, 1525 | "isDeleted": false, 1526 | "id": "3dJ2e94kZ1jRWpMeHS8tX", 1527 | "fillStyle": "solid", 1528 | "strokeWidth": 1, 1529 | "strokeStyle": "solid", 1530 | "roughness": 1, 1531 | "opacity": 100, 1532 | "angle": 0, 1533 | "x": 722.2877241146412, 1534 | "y": 619.2314830501111, 1535 | "strokeColor": "#000000", 1536 | "backgroundColor": "transparent", 1537 | "width": 345.09761836902214, 1538 | "height": 206.53703389977767, 1539 | "seed": 681606528, 1540 | "groupIds": [ 1541 | "XS2nkrSt3mnkc6HqdPeUL" 1542 | ], 1543 | "frameId": null, 1544 | "roundness": null, 1545 | "boundElements": [], 1546 | "updated": 1712910744410, 1547 | "link": null, 1548 | "locked": false 1549 | }, 1550 | { 1551 | "type": "line", 1552 | "version": 789, 1553 | "versionNonce": 660876672, 1554 | "isDeleted": false, 1555 | "id": "7mnZUlWnCiMV51I4ZBUza", 1556 | "fillStyle": "solid", 1557 | "strokeWidth": 1, 1558 | "strokeStyle": "solid", 1559 | "roughness": 1, 1560 | "opacity": 100, 1561 | "angle": 0, 1562 | "x": 719.3851976144626, 1563 | "y": 651.1503098491401, 1564 | "strokeColor": "#000000", 1565 | "backgroundColor": "transparent", 1566 | "width": 347.68306508561955, 1567 | "height": 0, 1568 | "seed": 179621248, 1569 | "groupIds": [ 1570 | "XS2nkrSt3mnkc6HqdPeUL" 1571 | ], 1572 | "frameId": null, 1573 | "roundness": { 1574 | "type": 2 1575 | }, 1576 | "boundElements": [], 1577 | "updated": 1712910226192, 1578 | "link": null, 1579 | "locked": false, 1580 | "startBinding": null, 1581 | "endBinding": null, 1582 | "lastCommittedPoint": null, 1583 | "startArrowhead": null, 1584 | "endArrowhead": null, 1585 | "points": [ 1586 | [ 1587 | 0, 1588 | 0 1589 | ], 1590 | [ 1591 | 347.68306508561955, 1592 | 0 1593 | ] 1594 | ] 1595 | }, 1596 | { 1597 | "type": "ellipse", 1598 | "version": 607, 1599 | "versionNonce": 308243072, 1600 | "isDeleted": false, 1601 | "id": "of2KAEBbBakNeaJsm52jW", 1602 | "fillStyle": "solid", 1603 | "strokeWidth": 1, 1604 | "strokeStyle": "solid", 1605 | "roughness": 0, 1606 | "opacity": 100, 1607 | "angle": 0, 1608 | "x": 734.398796187394, 1609 | "y": 630.7584172888348, 1610 | "strokeColor": "#000000", 1611 | "backgroundColor": "#fa5252", 1612 | "width": 13.497891275692947, 1613 | "height": 13.497891275692947, 1614 | "seed": 1170152832, 1615 | "groupIds": [ 1616 | "XS2nkrSt3mnkc6HqdPeUL" 1617 | ], 1618 | "frameId": null, 1619 | "roundness": null, 1620 | "boundElements": [], 1621 | "updated": 1712910226192, 1622 | "link": null, 1623 | "locked": false 1624 | }, 1625 | { 1626 | "type": "ellipse", 1627 | "version": 652, 1628 | "versionNonce": 1434615168, 1629 | "isDeleted": false, 1630 | "id": "1ce5vFPSttb1Tz4QhJgJ2", 1631 | "fillStyle": "solid", 1632 | "strokeWidth": 1, 1633 | "strokeStyle": "solid", 1634 | "roughness": 0, 1635 | "opacity": 100, 1636 | "angle": 0, 1637 | "x": 762.0929272721769, 1638 | "y": 630.7584172888348, 1639 | "strokeColor": "#000000", 1640 | "backgroundColor": "#fab005", 1641 | "width": 13.497891275692947, 1642 | "height": 13.497891275692947, 1643 | "seed": 1258253696, 1644 | "groupIds": [ 1645 | "XS2nkrSt3mnkc6HqdPeUL" 1646 | ], 1647 | "frameId": null, 1648 | "roundness": null, 1649 | "boundElements": [], 1650 | "updated": 1712910226192, 1651 | "link": null, 1652 | "locked": false 1653 | }, 1654 | { 1655 | "type": "ellipse", 1656 | "version": 710, 1657 | "versionNonce": 403577472, 1658 | "isDeleted": false, 1659 | "id": "f9HHQFgreV-i6XtNTu3eo", 1660 | "fillStyle": "solid", 1661 | "strokeWidth": 1, 1662 | "strokeStyle": "solid", 1663 | "roughness": 0, 1664 | "opacity": 100, 1665 | "angle": 0, 1666 | "x": 791.0033402728902, 1667 | "y": 631.9746992047656, 1668 | "strokeColor": "#000000", 1669 | "backgroundColor": "#40c057", 1670 | "width": 13.497891275692947, 1671 | "height": 13.497891275692947, 1672 | "seed": 1672854912, 1673 | "groupIds": [ 1674 | "XS2nkrSt3mnkc6HqdPeUL" 1675 | ], 1676 | "frameId": null, 1677 | "roundness": null, 1678 | "boundElements": [], 1679 | "updated": 1712910226192, 1680 | "link": null, 1681 | "locked": false 1682 | }, 1683 | { 1684 | "type": "line", 1685 | "version": 816, 1686 | "versionNonce": 1263979904, 1687 | "isDeleted": false, 1688 | "id": "yEZ4PyBSzYut2WIikjZ1h", 1689 | "fillStyle": "solid", 1690 | "strokeWidth": 1, 1691 | "strokeStyle": "solid", 1692 | "roughness": 1, 1693 | "opacity": 100, 1694 | "angle": 0, 1695 | "x": 719.7773275405939, 1696 | "y": 670.3561664834945, 1697 | "strokeColor": "#000000", 1698 | "backgroundColor": "transparent", 1699 | "width": 347.68306508561955, 1700 | "height": 0, 1701 | "seed": 746872192, 1702 | "groupIds": [ 1703 | "XS2nkrSt3mnkc6HqdPeUL" 1704 | ], 1705 | "frameId": null, 1706 | "roundness": { 1707 | "type": 2 1708 | }, 1709 | "boundElements": [], 1710 | "updated": 1712910226192, 1711 | "link": null, 1712 | "locked": false, 1713 | "startBinding": null, 1714 | "endBinding": null, 1715 | "lastCommittedPoint": null, 1716 | "startArrowhead": null, 1717 | "endArrowhead": null, 1718 | "points": [ 1719 | [ 1720 | 0, 1721 | 0 1722 | ], 1723 | [ 1724 | 347.68306508561955, 1725 | 0 1726 | ] 1727 | ] 1728 | }, 1729 | { 1730 | "type": "text", 1731 | "version": 273, 1732 | "versionNonce": 1416022656, 1733 | "isDeleted": false, 1734 | "id": "qPtXS8T_0CXIerM9m_wcy", 1735 | "fillStyle": "solid", 1736 | "strokeWidth": 2, 1737 | "strokeStyle": "solid", 1738 | "roughness": 1, 1739 | "opacity": 100, 1740 | "angle": 0, 1741 | "x": 725.0617860308519, 1742 | "y": 647, 1743 | "strokeColor": "#1e1e1e", 1744 | "backgroundColor": "transparent", 1745 | "width": 256.3500061035156, 1746 | "height": 25, 1747 | "seed": 656190848, 1748 | "groupIds": [ 1749 | "XS2nkrSt3mnkc6HqdPeUL" 1750 | ], 1751 | "frameId": null, 1752 | "roundness": null, 1753 | "boundElements": [], 1754 | "updated": 1712910226192, 1755 | "link": null, 1756 | "locked": false, 1757 | "fontSize": 20, 1758 | "fontFamily": 1, 1759 | "text": "http://verboten.onion.proxy", 1760 | "textAlign": "left", 1761 | "verticalAlign": "top", 1762 | "containerId": null, 1763 | "originalText": "http://verboten.onion.proxy", 1764 | "lineHeight": 1.25 1765 | }, 1766 | { 1767 | "id": "eIs4pBsIeS2lbBYMVO3_P", 1768 | "type": "image", 1769 | "x": 847.3916625976562, 1770 | "y": 700, 1771 | "width": 90.00000000000003, 1772 | "height": 90.00000000000003, 1773 | "angle": 0, 1774 | "strokeColor": "transparent", 1775 | "backgroundColor": "#ffffff", 1776 | "fillStyle": "solid", 1777 | "strokeWidth": 2, 1778 | "strokeStyle": "solid", 1779 | "roughness": 1, 1780 | "opacity": 100, 1781 | "groupIds": [ 1782 | "XS2nkrSt3mnkc6HqdPeUL" 1783 | ], 1784 | "frameId": null, 1785 | "roundness": null, 1786 | "seed": 945109632, 1787 | "version": 121, 1788 | "versionNonce": 1077295744, 1789 | "isDeleted": false, 1790 | "boundElements": [ 1791 | { 1792 | "id": "kHNfnrtrQ3eObLK9gfhEe", 1793 | "type": "arrow" 1794 | } 1795 | ], 1796 | "updated": 1712910434803, 1797 | "link": null, 1798 | "locked": false, 1799 | "status": "saved", 1800 | "fileId": "3c0354edb1c6699d5dddc39861f82e84751e6663", 1801 | "scale": [ 1802 | 1, 1803 | 1 1804 | ] 1805 | }, 1806 | { 1807 | "type": "line", 1808 | "version": 1780, 1809 | "versionNonce": 422926976, 1810 | "isDeleted": false, 1811 | "id": "x_RfEKlgzP57R46LPI2u-", 1812 | "fillStyle": "solid", 1813 | "strokeWidth": 1, 1814 | "strokeStyle": "solid", 1815 | "roughness": 0, 1816 | "opacity": 50, 1817 | "angle": 0.21948755520879892, 1818 | "x": 1159.8437169165668, 1819 | "y": 547.1244667919952, 1820 | "strokeColor": "#eebefa", 1821 | "backgroundColor": "#eebefa", 1822 | "width": 65.56153549310424, 1823 | "height": 86.02434618404497, 1824 | "seed": 1477122688, 1825 | "groupIds": [ 1826 | "PkgXFTGhIazaHYIR0_fqz", 1827 | "FHsd7QaAyapxh3DWBjCaN" 1828 | ], 1829 | "frameId": null, 1830 | "roundness": { 1831 | "type": 2 1832 | }, 1833 | "boundElements": [], 1834 | "updated": 1712910290858, 1835 | "link": null, 1836 | "locked": false, 1837 | "startBinding": null, 1838 | "endBinding": null, 1839 | "lastCommittedPoint": null, 1840 | "startArrowhead": null, 1841 | "endArrowhead": null, 1842 | "points": [ 1843 | [ 1844 | 0, 1845 | 0 1846 | ], 1847 | [ 1848 | -5.030197718757853, 1849 | 12.909891407962958 1850 | ], 1851 | [ 1852 | -10.318617178790982, 1853 | 22.776008798284742 1854 | ], 1855 | [ 1856 | -13.349284456052667, 1857 | 34.056225029988106 1858 | ], 1859 | [ 1860 | -14.636680703926142, 1861 | 53.16338467541828 1862 | ], 1863 | [ 1864 | -11.867382115399797, 1865 | 62.48840496558488 1866 | ], 1867 | [ 1868 | -6.5223951946730585, 1869 | 75.88997115414378 1870 | ], 1871 | [ 1872 | 10.034454145650859, 1873 | 86.02434618404497 1874 | ], 1875 | [ 1876 | 30.35422379059385, 1877 | 85.55297990358446 1878 | ], 1879 | [ 1880 | 44.40245959450504, 1881 | 77.5397531357556 1882 | ], 1883 | [ 1884 | 50.9248547891781, 1885 | 62.69171530124922 1886 | ], 1887 | [ 1888 | 43.62975669984653, 1889 | 52.86253000305875 1890 | ], 1891 | [ 1892 | 33.84493225241774, 1893 | 47.3650754644934 1894 | ], 1895 | [ 1896 | 12.665266083293874, 1897 | 38.006830523766034 1898 | ], 1899 | [ 1900 | 4.766365719184157, 1901 | 20.740116340262897 1902 | ], 1903 | [ 1904 | 1.7560294754889003, 1905 | 9.427325609210408 1906 | ], 1907 | [ 1908 | 0, 1909 | 0 1910 | ] 1911 | ] 1912 | }, 1913 | { 1914 | "type": "line", 1915 | "version": 1702, 1916 | "versionNonce": 782633600, 1917 | "isDeleted": false, 1918 | "id": "OKbwW1-6itZpTAa_O_N08", 1919 | "fillStyle": "solid", 1920 | "strokeWidth": 1, 1921 | "strokeStyle": "solid", 1922 | "roughness": 0, 1923 | "opacity": 20, 1924 | "angle": 0.21948755520879892, 1925 | "x": 1163.9952735976744, 1926 | "y": 540.5304355418531, 1927 | "strokeColor": "#9c36b5", 1928 | "backgroundColor": "#9c36b5", 1929 | "width": 70.58839779758353, 1930 | "height": 100.42430134705471, 1931 | "seed": 214157952, 1932 | "groupIds": [ 1933 | "PkgXFTGhIazaHYIR0_fqz", 1934 | "FHsd7QaAyapxh3DWBjCaN" 1935 | ], 1936 | "frameId": null, 1937 | "roundness": { 1938 | "type": 2 1939 | }, 1940 | "boundElements": [], 1941 | "updated": 1712910290858, 1942 | "link": null, 1943 | "locked": false, 1944 | "startBinding": null, 1945 | "endBinding": null, 1946 | "lastCommittedPoint": null, 1947 | "startArrowhead": null, 1948 | "endArrowhead": null, 1949 | "points": [ 1950 | [ 1951 | 0, 1952 | 0 1953 | ], 1954 | [ 1955 | -8.857222695769545, 1956 | 15.94983187346578 1957 | ], 1958 | [ 1959 | -14.506789125531862, 1960 | 27.51799170583624 1961 | ], 1962 | [ 1963 | -17.735112799681755, 1964 | 40.700313375281645 1965 | ], 1966 | [ 1967 | -19.887328582448355, 1968 | 59.8012284473352 1969 | ], 1970 | [ 1971 | -16.389977935452634, 1972 | 73.79063103531807 1973 | ], 1974 | [ 1975 | -7.781114804386247, 1976 | 88.85614151468427 1977 | ], 1978 | [ 1979 | 9.97466540343818, 1980 | 100.42430134705471 1981 | ], 1982 | [ 1983 | 31.765850203949974, 1984 | 99.88624740136305 1985 | ], 1986 | [ 1987 | 46.831360683316156, 1988 | 90.739330324605 1989 | ], 1990 | [ 1991 | 50.70106921513517, 1992 | 74.74451158957555 1993 | ], 1994 | [ 1995 | 46.68456309050828, 1996 | 61.15014382234127 1997 | ], 1998 | [ 1999 | 36.2904169903138, 2000 | 52.159350214203 2001 | ], 2002 | [ 2003 | 17.238516007037788, 2004 | 41.17624480269478 2005 | ], 2006 | [ 2007 | 5.303423361028801, 2008 | 25.68558388186304 2009 | ], 2010 | [ 2011 | 1.0967752995259668, 2012 | 12.99053517216171 2013 | ], 2014 | [ 2015 | 0, 2016 | 0 2017 | ] 2018 | ] 2019 | }, 2020 | { 2021 | "type": "line", 2022 | "version": 1084, 2023 | "versionNonce": 847297152, 2024 | "isDeleted": false, 2025 | "id": "nluN45ZekhHwelie3Do09", 2026 | "fillStyle": "solid", 2027 | "strokeWidth": 1, 2028 | "strokeStyle": "solid", 2029 | "roughness": 0, 2030 | "opacity": 80, 2031 | "angle": 0.14384296208148317, 2032 | "x": 1151.3040505340741, 2033 | "y": 592.5122584099801, 2034 | "strokeColor": "#f3f0ff", 2035 | "backgroundColor": "#f3f0ff", 2036 | "width": 54.202462427781136, 2037 | "height": 45.3482371173782, 2038 | "seed": 115767936, 2039 | "groupIds": [ 2040 | "PkgXFTGhIazaHYIR0_fqz", 2041 | "FHsd7QaAyapxh3DWBjCaN" 2042 | ], 2043 | "frameId": null, 2044 | "roundness": { 2045 | "type": 2 2046 | }, 2047 | "boundElements": [], 2048 | "updated": 1712910290858, 2049 | "link": null, 2050 | "locked": false, 2051 | "startBinding": null, 2052 | "endBinding": null, 2053 | "lastCommittedPoint": null, 2054 | "startArrowhead": null, 2055 | "endArrowhead": null, 2056 | "points": [ 2057 | [ 2058 | 0, 2059 | 0 2060 | ], 2061 | [ 2062 | 5.237799545184842, 2063 | 9.252453963761646 2064 | ], 2065 | [ 2066 | 18.229776575702456, 2067 | 19.67430305989671 2068 | ], 2069 | [ 2070 | 35.403554299665146, 2071 | 30.484380557783652 2072 | ], 2073 | [ 2074 | 52.577332023627875, 2075 | 36.565049150345054 2076 | ], 2077 | [ 2078 | 48.53644314740136, 2079 | 45.3482371173782 2080 | ], 2081 | [ 2082 | 40.791406134633846, 2083 | 43.996977430142316 2084 | ], 2085 | [ 2086 | 22.27066545192899, 2087 | 34.406708544571714 2088 | ], 2089 | [ 2090 | 10.149826917762452, 2091 | 27.03744339073084 2092 | ], 2093 | [ 2094 | 2.673816877840766, 2095 | 15.620523998189114 2096 | ], 2097 | [ 2098 | -1.6251304041532642, 2099 | 0 2100 | ] 2101 | ] 2102 | }, 2103 | { 2104 | "type": "line", 2105 | "version": 2039, 2106 | "versionNonce": 1199925888, 2107 | "isDeleted": false, 2108 | "id": "LuLAjRUogIoIU6zzQthO3", 2109 | "fillStyle": "solid", 2110 | "strokeWidth": 1, 2111 | "strokeStyle": "solid", 2112 | "roughness": 0, 2113 | "opacity": 30, 2114 | "angle": 0.04895124137395612, 2115 | "x": 1163.8201113216924, 2116 | "y": 552.3172143606996, 2117 | "strokeColor": "#6741d9", 2118 | "backgroundColor": "#6741d9", 2119 | "width": 43.6288038055354, 2120 | "height": 69.78936394846636, 2121 | "seed": 154348160, 2122 | "groupIds": [ 2123 | "PkgXFTGhIazaHYIR0_fqz", 2124 | "FHsd7QaAyapxh3DWBjCaN" 2125 | ], 2126 | "frameId": null, 2127 | "roundness": { 2128 | "type": 2 2129 | }, 2130 | "boundElements": [], 2131 | "updated": 1712910290858, 2132 | "link": null, 2133 | "locked": false, 2134 | "startBinding": null, 2135 | "endBinding": null, 2136 | "lastCommittedPoint": null, 2137 | "startArrowhead": null, 2138 | "endArrowhead": null, 2139 | "points": [ 2140 | [ 2141 | 0, 2142 | 0 2143 | ], 2144 | [ 2145 | -3.347412590692311, 2146 | 10.473466523975866 2147 | ], 2148 | [ 2149 | -6.866662305144604, 2150 | 18.47759660871188 2151 | ], 2152 | [ 2153 | -8.883460524481817, 2154 | 27.62894911451859 2155 | ], 2156 | [ 2157 | -9.7401756379398, 2158 | 43.130101726169556 2159 | ], 2160 | [ 2161 | -7.8973087207903365, 2162 | 50.69525349686646 2163 | ], 2164 | [ 2165 | -4.34041543033244, 2166 | 61.56760326412651 2167 | ], 2168 | [ 2169 | 6.677562200511447, 2170 | 69.78936394846636 2171 | ], 2172 | [ 2173 | 20.199625656547127, 2174 | 69.40695647477614 2175 | ], 2176 | [ 2177 | 29.548212737263153, 2178 | 62.9060294220423 2179 | ], 2180 | [ 2181 | 33.8886281675956, 2182 | 50.86019400080015 2183 | ], 2184 | [ 2185 | 29.03400722426733, 2186 | 42.88602598300756 2187 | ], 2188 | [ 2189 | 22.522564457137847, 2190 | 38.42608094882788 2191 | ], 2192 | [ 2193 | 8.428271316968308, 2194 | 30.833974864231458 2195 | ], 2196 | [ 2197 | -0.09293818689106788, 2198 | 17.055680511391046 2199 | ], 2200 | [ 2201 | -0.22149020606105474, 2202 | 8.05633210939389 2203 | ], 2204 | [ 2205 | 0, 2206 | 0 2207 | ] 2208 | ] 2209 | }, 2210 | { 2211 | "type": "line", 2212 | "version": 1369, 2213 | "versionNonce": 947133056, 2214 | "isDeleted": false, 2215 | "id": "N3DDlFrQQ5sTRLFaAkWvz", 2216 | "fillStyle": "solid", 2217 | "strokeWidth": 1, 2218 | "strokeStyle": "solid", 2219 | "roughness": 0, 2220 | "opacity": 70, 2221 | "angle": 5.581134327900369, 2222 | "x": 1151.9100849728616, 2223 | "y": 591.7186041392409, 2224 | "strokeColor": "#f3f0ff", 2225 | "backgroundColor": "#f3f0ff", 2226 | "width": 49.58190485258915, 2227 | "height": 41.0328016958292, 2228 | "seed": 2120866432, 2229 | "groupIds": [ 2230 | "PkgXFTGhIazaHYIR0_fqz", 2231 | "FHsd7QaAyapxh3DWBjCaN" 2232 | ], 2233 | "frameId": null, 2234 | "roundness": { 2235 | "type": 2 2236 | }, 2237 | "boundElements": [], 2238 | "updated": 1712910290858, 2239 | "link": null, 2240 | "locked": false, 2241 | "startBinding": null, 2242 | "endBinding": null, 2243 | "lastCommittedPoint": null, 2244 | "startArrowhead": null, 2245 | "endArrowhead": null, 2246 | "points": [ 2247 | [ 2248 | 0, 2249 | 0 2250 | ], 2251 | [ 2252 | 5.237799545184841, 2253 | 9.252453963761646 2254 | ], 2255 | [ 2256 | 16.751082093647234, 2257 | 22.0622715374243 2258 | ], 2259 | [ 2260 | 34.862772702872306, 2261 | 33.11973755000102 2262 | ], 2263 | [ 2264 | 47.95677444843589, 2265 | 34.18880974435727 2266 | ], 2267 | [ 2268 | 46.510874603096866, 2269 | 41.0328016958292 2270 | ], 2271 | [ 2272 | 37.75891785394692, 2273 | 40.57345032644236 2274 | ], 2275 | [ 2276 | 25.239783487579295, 2277 | 35.73002364676378 2278 | ], 2279 | [ 2280 | 14.551634868054743, 2281 | 26.73232123708791 2282 | ], 2283 | [ 2284 | 6.22408447161388, 2285 | 16.788459720518034 2286 | ], 2287 | [ 2288 | -1.6251304041532642, 2289 | 0 2290 | ] 2291 | ] 2292 | }, 2293 | { 2294 | "type": "line", 2295 | "version": 1785, 2296 | "versionNonce": 2014104192, 2297 | "isDeleted": false, 2298 | "id": "R5BOhPwFss0-oj80QUVbe", 2299 | "fillStyle": "solid", 2300 | "strokeWidth": 1, 2301 | "strokeStyle": "solid", 2302 | "roughness": 0, 2303 | "opacity": 50, 2304 | "angle": 0.8590091674223101, 2305 | "x": 1153.1386604272623, 2306 | "y": 558.3185703807861, 2307 | "strokeColor": "#f3f0ff", 2308 | "backgroundColor": "#f3f0ff", 2309 | "width": 26.30003592989374, 2310 | "height": 18.993695303794954, 2311 | "seed": 2034928256, 2312 | "groupIds": [ 2313 | "PkgXFTGhIazaHYIR0_fqz", 2314 | "FHsd7QaAyapxh3DWBjCaN" 2315 | ], 2316 | "frameId": null, 2317 | "roundness": { 2318 | "type": 2 2319 | }, 2320 | "boundElements": [], 2321 | "updated": 1712910290858, 2322 | "link": null, 2323 | "locked": false, 2324 | "startBinding": null, 2325 | "endBinding": null, 2326 | "lastCommittedPoint": null, 2327 | "startArrowhead": null, 2328 | "endArrowhead": null, 2329 | "points": [ 2330 | [ 2331 | 0, 2332 | 0 2333 | ], 2334 | [ 2335 | 6.105982301565242, 2336 | 5.572186306353746 2337 | ], 2338 | [ 2339 | 12.55492933366075, 2340 | 9.888913242975946 2341 | ], 2342 | [ 2343 | 18.562839646970097, 2344 | 12.396144017909142 2345 | ], 2346 | [ 2347 | 26.30003592989374, 2348 | 13.298823556628545 2349 | ], 2350 | [ 2351 | 24.242095285728716, 2352 | 18.993695303794954 2353 | ], 2354 | [ 2355 | 21.534445000814113, 2356 | 18.681919818586092 2357 | ], 2358 | [ 2359 | 13.102753121281047, 2360 | 15.828823297303897 2361 | ], 2362 | [ 2363 | 6.8833237326992815, 2364 | 11.41899291577411 2365 | ], 2366 | [ 2367 | 2.717666460511379, 2368 | 4.674875931270824 2369 | ], 2370 | [ 2371 | 0, 2372 | 0 2373 | ] 2374 | ] 2375 | }, 2376 | { 2377 | "type": "line", 2378 | "version": 1628, 2379 | "versionNonce": 554662528, 2380 | "isDeleted": false, 2381 | "id": "iTGPQMQ_yhEJxo1YwKJw4", 2382 | "fillStyle": "solid", 2383 | "strokeWidth": 1, 2384 | "strokeStyle": "solid", 2385 | "roughness": 0, 2386 | "opacity": 60, 2387 | "angle": 0.21948755520879892, 2388 | "x": 1161.7534700551575, 2389 | "y": 542.5833000269658, 2390 | "strokeColor": "#eebefa", 2391 | "backgroundColor": "#eebefa", 2392 | "width": 68.77605329767091, 2393 | "height": 98.57677556579792, 2394 | "seed": 882195072, 2395 | "groupIds": [ 2396 | "PkgXFTGhIazaHYIR0_fqz", 2397 | "FHsd7QaAyapxh3DWBjCaN" 2398 | ], 2399 | "frameId": null, 2400 | "roundness": { 2401 | "type": 2 2402 | }, 2403 | "boundElements": [], 2404 | "updated": 1712910290858, 2405 | "link": null, 2406 | "locked": false, 2407 | "startBinding": null, 2408 | "endBinding": null, 2409 | "lastCommittedPoint": null, 2410 | "startArrowhead": null, 2411 | "endArrowhead": null, 2412 | "points": [ 2413 | [ 2414 | 0, 2415 | 0 2416 | ], 2417 | [ 2418 | -8.07080918537474, 2419 | 13.720375615137057 2420 | ], 2421 | [ 2422 | -13.720375615137057, 2423 | 25.288535447507517 2424 | ], 2425 | [ 2426 | -16.94869928928695, 2427 | 38.47085711695293 2428 | ], 2429 | [ 2430 | -19.10091507205355, 2431 | 57.57177218900648 2432 | ], 2433 | [ 2434 | -17.5056517030392, 2435 | 72.24224784762407 2436 | ], 2437 | [ 2438 | -8.05392228800894, 2439 | 87.633236030493 2440 | ], 2441 | [ 2442 | 9.04901123596535, 2443 | 98.57677556579792 2444 | ], 2445 | [ 2446 | 32.55226371434478, 2447 | 97.65679114303433 2448 | ], 2449 | [ 2450 | 46.74368403318804, 2451 | 89.88592999666514 2452 | ], 2453 | [ 2454 | 49.67513822561736, 2455 | 73.25313428191566 2456 | ], 2457 | [ 2458 | 46.44373599418248, 2459 | 59.14984585025575 2460 | ], 2461 | [ 2462 | 34.21203077365387, 2463 | 49.978446196461384 2464 | ], 2465 | [ 2466 | 15.334537452212007, 2467 | 39.546965008336215 2468 | ], 2469 | [ 2470 | 4.16141448350231, 2471 | 25.17008657824654 2472 | ], 2473 | [ 2474 | 0.47026372561592045, 2475 | 11.333028991018546 2476 | ], 2477 | [ 2478 | 0, 2479 | 0 2480 | ] 2481 | ] 2482 | }, 2483 | { 2484 | "type": "text", 2485 | "version": 215, 2486 | "versionNonce": 2143595904, 2487 | "isDeleted": false, 2488 | "id": "U2YPm1jsIvYTS3sbylTcP", 2489 | "fillStyle": "solid", 2490 | "strokeWidth": 2, 2491 | "strokeStyle": "solid", 2492 | "roughness": 1, 2493 | "opacity": 100, 2494 | "angle": 0, 2495 | "x": 1181.7916641235352, 2496 | "y": 539, 2497 | "strokeColor": "#1e1e1e", 2498 | "backgroundColor": "transparent", 2499 | "width": 78.5, 2500 | "height": 50, 2501 | "seed": 1526091136, 2502 | "groupIds": [ 2503 | "FHsd7QaAyapxh3DWBjCaN" 2504 | ], 2505 | "frameId": null, 2506 | "roundness": null, 2507 | "boundElements": [ 2508 | { 2509 | "id": "TIUy5lsVpFzE_KRGAXNR3", 2510 | "type": "arrow" 2511 | } 2512 | ], 2513 | "updated": 1712910864944, 2514 | "link": null, 2515 | "locked": false, 2516 | "fontSize": 20, 2517 | "fontFamily": 1, 2518 | "text": "tor2web\nproxy", 2519 | "textAlign": "center", 2520 | "verticalAlign": "top", 2521 | "containerId": null, 2522 | "originalText": "tor2web\nproxy", 2523 | "lineHeight": 1.25 2524 | }, 2525 | { 2526 | "id": "u6MHMEPk9IYyN6aUEoLUN", 2527 | "type": "arrow", 2528 | "x": 576.8916625976562, 2529 | "y": 606.5, 2530 | "width": 180, 2531 | "height": 166, 2532 | "angle": 0, 2533 | "strokeColor": "#1e1e1e", 2534 | "backgroundColor": "#ffffff", 2535 | "fillStyle": "solid", 2536 | "strokeWidth": 2, 2537 | "strokeStyle": "solid", 2538 | "roughness": 1, 2539 | "opacity": 100, 2540 | "groupIds": [], 2541 | "frameId": null, 2542 | "roundness": { 2543 | "type": 2 2544 | }, 2545 | "seed": 1985600128, 2546 | "version": 138, 2547 | "versionNonce": 688237184, 2548 | "isDeleted": false, 2549 | "boundElements": null, 2550 | "updated": 1712910354990, 2551 | "link": null, 2552 | "locked": false, 2553 | "points": [ 2554 | [ 2555 | 0, 2556 | 0 2557 | ], 2558 | [ 2559 | 94, 2560 | -46 2561 | ], 2562 | [ 2563 | 180, 2564 | -166 2565 | ] 2566 | ], 2567 | "lastCommittedPoint": null, 2568 | "startBinding": null, 2569 | "endBinding": { 2570 | "elementId": "aRyu512MdMK-i7FQvljwO", 2571 | "focus": 0.55949199953964, 2572 | "gap": 14.5 2573 | }, 2574 | "startArrowhead": null, 2575 | "endArrowhead": "arrow" 2576 | }, 2577 | { 2578 | "id": "4ydMUZkreQLeF6TqMQbsQ", 2579 | "type": "arrow", 2580 | "x": 810.8916625976562, 2581 | "y": 368.5, 2582 | "width": 338, 2583 | "height": 262, 2584 | "angle": 0, 2585 | "strokeColor": "#1e1e1e", 2586 | "backgroundColor": "#ffffff", 2587 | "fillStyle": "solid", 2588 | "strokeWidth": 2, 2589 | "strokeStyle": "solid", 2590 | "roughness": 1, 2591 | "opacity": 100, 2592 | "groupIds": [], 2593 | "frameId": null, 2594 | "roundness": { 2595 | "type": 2 2596 | }, 2597 | "seed": 1703660160, 2598 | "version": 207, 2599 | "versionNonce": 1811483264, 2600 | "isDeleted": false, 2601 | "boundElements": null, 2602 | "updated": 1712910903644, 2603 | "link": null, 2604 | "locked": false, 2605 | "points": [ 2606 | [ 2607 | 0, 2608 | 0 2609 | ], 2610 | [ 2611 | 92, 2612 | -68 2613 | ], 2614 | [ 2615 | 338, 2616 | 194 2617 | ] 2618 | ], 2619 | "lastCommittedPoint": null, 2620 | "startBinding": { 2621 | "elementId": "57_CJ-VEYaox04qCg8qCi", 2622 | "focus": -0.7358889657499528, 2623 | "gap": 4.731483050111137 2624 | }, 2625 | "endBinding": null, 2626 | "startArrowhead": null, 2627 | "endArrowhead": "arrow" 2628 | }, 2629 | { 2630 | "type": "text", 2631 | "version": 287, 2632 | "versionNonce": 939743872, 2633 | "isDeleted": false, 2634 | "id": "EExnL0LLXmGmMBfOeVR1P", 2635 | "fillStyle": "solid", 2636 | "strokeWidth": 2, 2637 | "strokeStyle": "solid", 2638 | "roughness": 1, 2639 | "opacity": 100, 2640 | "angle": 0, 2641 | "x": 621.7833251953125, 2642 | "y": 523, 2643 | "strokeColor": "#1e1e1e", 2644 | "backgroundColor": "transparent", 2645 | "width": 41.400001525878906, 2646 | "height": 25, 2647 | "seed": 530594432, 2648 | "groupIds": [], 2649 | "frameId": null, 2650 | "roundness": null, 2651 | "boundElements": [], 2652 | "updated": 1712910613164, 2653 | "link": null, 2654 | "locked": false, 2655 | "fontSize": 20, 2656 | "fontFamily": 1, 2657 | "text": "visit", 2658 | "textAlign": "left", 2659 | "verticalAlign": "top", 2660 | "containerId": null, 2661 | "originalText": "visit", 2662 | "lineHeight": 1.25 2663 | }, 2664 | { 2665 | "type": "text", 2666 | "version": 496, 2667 | "versionNonce": 871594624, 2668 | "isDeleted": false, 2669 | "id": "ugB-CWNu3odPDowYYw7fo", 2670 | "fillStyle": "solid", 2671 | "strokeWidth": 2, 2672 | "strokeStyle": "solid", 2673 | "roughness": 1, 2674 | "opacity": 100, 2675 | "angle": 0, 2676 | "x": 1412.1916618347168, 2677 | "y": 684, 2678 | "strokeColor": "#1e1e1e", 2679 | "backgroundColor": "transparent", 2680 | "width": 58.400001525878906, 2681 | "height": 25, 2682 | "seed": 1976482432, 2683 | "groupIds": [], 2684 | "frameId": null, 2685 | "roundness": null, 2686 | "boundElements": [], 2687 | "updated": 1712910909740, 2688 | "link": null, 2689 | "locked": false, 2690 | "fontSize": 20, 2691 | "fontFamily": 1, 2692 | "text": "lookup", 2693 | "textAlign": "left", 2694 | "verticalAlign": "top", 2695 | "containerId": null, 2696 | "originalText": "lookup", 2697 | "lineHeight": 1.25 2698 | }, 2699 | { 2700 | "type": "text", 2701 | "version": 531, 2702 | "versionNonce": 885516928, 2703 | "isDeleted": false, 2704 | "id": "zLJJECxPG_Z0cJ2y2Uzey", 2705 | "fillStyle": "solid", 2706 | "strokeWidth": 2, 2707 | "strokeStyle": "solid", 2708 | "roughness": 1, 2709 | "opacity": 100, 2710 | "angle": 0, 2711 | "x": 1245.6916618347168, 2712 | "y": 441, 2713 | "strokeColor": "#1e1e1e", 2714 | "backgroundColor": "transparent", 2715 | "width": 58.33333206176758, 2716 | "height": 25, 2717 | "seed": 1330662784, 2718 | "groupIds": [], 2719 | "frameId": null, 2720 | "roundness": null, 2721 | "boundElements": [], 2722 | "updated": 1712910912441, 2723 | "link": null, 2724 | "locked": false, 2725 | "fontSize": 20, 2726 | "fontFamily": 1, 2727 | "text": "result", 2728 | "textAlign": "left", 2729 | "verticalAlign": "top", 2730 | "containerId": null, 2731 | "originalText": "result", 2732 | "lineHeight": 1.25 2733 | }, 2734 | { 2735 | "type": "text", 2736 | "version": 475, 2737 | "versionNonce": 658763136, 2738 | "isDeleted": false, 2739 | "id": "ZhDKds3gMLCdB_RkBvTrh", 2740 | "fillStyle": "solid", 2741 | "strokeWidth": 2, 2742 | "strokeStyle": "solid", 2743 | "roughness": 1, 2744 | "opacity": 100, 2745 | "angle": 0, 2746 | "x": 1119.7249965667725, 2747 | "y": 689, 2748 | "strokeColor": "#1e1e1e", 2749 | "backgroundColor": "transparent", 2750 | "width": 50.20000076293945, 2751 | "height": 25, 2752 | "seed": 1138097536, 2753 | "groupIds": [], 2754 | "frameId": null, 2755 | "roundness": null, 2756 | "boundElements": [], 2757 | "updated": 1712910648595, 2758 | "link": null, 2759 | "locked": false, 2760 | "fontSize": 20, 2761 | "fontFamily": 1, 2762 | "text": "filter", 2763 | "textAlign": "left", 2764 | "verticalAlign": "top", 2765 | "containerId": null, 2766 | "originalText": "filter", 2767 | "lineHeight": 1.25 2768 | }, 2769 | { 2770 | "id": "INg2QbNtk1hIN2Ud3g5n5", 2771 | "type": "line", 2772 | "x": 1068.8916625976562, 2773 | "y": 708.5, 2774 | "width": 83, 2775 | "height": 69, 2776 | "angle": 0, 2777 | "strokeColor": "#1e1e1e", 2778 | "backgroundColor": "#ffffff", 2779 | "fillStyle": "solid", 2780 | "strokeWidth": 2, 2781 | "strokeStyle": "solid", 2782 | "roughness": 1, 2783 | "opacity": 100, 2784 | "groupIds": [], 2785 | "frameId": null, 2786 | "roundness": { 2787 | "type": 2 2788 | }, 2789 | "seed": 633171328, 2790 | "version": 164, 2791 | "versionNonce": 1566961024, 2792 | "isDeleted": false, 2793 | "boundElements": null, 2794 | "updated": 1712910932949, 2795 | "link": null, 2796 | "locked": false, 2797 | "points": [ 2798 | [ 2799 | 0, 2800 | 0 2801 | ], 2802 | [ 2803 | 50, 2804 | -28 2805 | ], 2806 | [ 2807 | 83, 2808 | -69 2809 | ] 2810 | ], 2811 | "lastCommittedPoint": null, 2812 | "startBinding": null, 2813 | "endBinding": null, 2814 | "startArrowhead": null, 2815 | "endArrowhead": null 2816 | }, 2817 | { 2818 | "id": "GNL65DN9iRrPXe6FJiteq", 2819 | "type": "arrow", 2820 | "x": 1208.8916625976562, 2821 | "y": 636.5, 2822 | "width": 288, 2823 | "height": 83, 2824 | "angle": 0, 2825 | "strokeColor": "#1e1e1e", 2826 | "backgroundColor": "#ffffff", 2827 | "fillStyle": "solid", 2828 | "strokeWidth": 2, 2829 | "strokeStyle": "solid", 2830 | "roughness": 1, 2831 | "opacity": 100, 2832 | "groupIds": [], 2833 | "frameId": null, 2834 | "roundness": { 2835 | "type": 2 2836 | }, 2837 | "seed": 1297214848, 2838 | "version": 620, 2839 | "versionNonce": 1938422400, 2840 | "isDeleted": false, 2841 | "boundElements": null, 2842 | "updated": 1712910899594, 2843 | "link": null, 2844 | "locked": false, 2845 | "points": [ 2846 | [ 2847 | 0, 2848 | 0 2849 | ], 2850 | [ 2851 | 114, 2852 | 72 2853 | ], 2854 | [ 2855 | 288, 2856 | 83 2857 | ], 2858 | [ 2859 | 249, 2860 | 20 2861 | ] 2862 | ], 2863 | "lastCommittedPoint": null, 2864 | "startBinding": null, 2865 | "endBinding": { 2866 | "elementId": "bw6yd2uTX3558XN8RBku7", 2867 | "focus": -1.1681604357158686, 2868 | "gap": 9.852159189192204 2869 | }, 2870 | "startArrowhead": null, 2871 | "endArrowhead": "arrow" 2872 | }, 2873 | { 2874 | "id": "TIUy5lsVpFzE_KRGAXNR3", 2875 | "type": "arrow", 2876 | "x": 1379.8916625976562, 2877 | "y": 573.5, 2878 | "width": 153, 2879 | "height": 95, 2880 | "angle": 0, 2881 | "strokeColor": "#1e1e1e", 2882 | "backgroundColor": "#ffffff", 2883 | "fillStyle": "solid", 2884 | "strokeWidth": 2, 2885 | "strokeStyle": "solid", 2886 | "roughness": 1, 2887 | "opacity": 100, 2888 | "groupIds": [], 2889 | "frameId": null, 2890 | "roundness": { 2891 | "type": 2 2892 | }, 2893 | "seed": 613870208, 2894 | "version": 306, 2895 | "versionNonce": 1854298752, 2896 | "isDeleted": false, 2897 | "boundElements": null, 2898 | "updated": 1712910882528, 2899 | "link": null, 2900 | "locked": false, 2901 | "points": [ 2902 | [ 2903 | 0, 2904 | 0 2905 | ], 2906 | [ 2907 | -95, 2908 | -95 2909 | ], 2910 | [ 2911 | -153, 2912 | -37 2913 | ] 2914 | ], 2915 | "lastCommittedPoint": null, 2916 | "startBinding": { 2917 | "elementId": "V6jZTQsUYoN2mn4Ag-kVh", 2918 | "focus": -0.2782627206819378, 2919 | "gap": 4.134976241073673 2920 | }, 2921 | "endBinding": { 2922 | "elementId": "U2YPm1jsIvYTS3sbylTcP", 2923 | "focus": -0.33696500429383514, 2924 | "gap": 2.5 2925 | }, 2926 | "startArrowhead": null, 2927 | "endArrowhead": "arrow" 2928 | }, 2929 | { 2930 | "id": "n062WfA8BqEGAn0iNlHp7", 2931 | "type": "image", 2932 | "x": 776.5604070322065, 2933 | "y": 155, 2934 | "width": 508.6625111308994, 2935 | "height": 698.0000000000001, 2936 | "angle": 0, 2937 | "strokeColor": "transparent", 2938 | "backgroundColor": "#ffffff", 2939 | "fillStyle": "solid", 2940 | "strokeWidth": 2, 2941 | "strokeStyle": "solid", 2942 | "roughness": 1, 2943 | "opacity": 100, 2944 | "groupIds": [], 2945 | "frameId": null, 2946 | "roundness": null, 2947 | "seed": 736243072, 2948 | "version": 128, 2949 | "versionNonce": 115899776, 2950 | "isDeleted": false, 2951 | "boundElements": null, 2952 | "updated": 1712911290264, 2953 | "link": null, 2954 | "locked": false, 2955 | "status": "saved", 2956 | "fileId": "bc967b68117a93ee92d3564a56d233dbedc82486", 2957 | "scale": [ 2958 | 1, 2959 | 1 2960 | ] 2961 | } 2962 | ], 2963 | "appState": { 2964 | "gridSize": null, 2965 | "viewBackgroundColor": "#ffffff" 2966 | }, 2967 | "files": { 2968 | "91e708780a61d85dd587d22f067e5266db307c7f": { 2969 | "mimeType": "image/svg+xml", 2970 | "id": "91e708780a61d85dd587d22f067e5266db307c7f", 2971 | "dataURL": "data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDE1MC41IDkxLjEiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE1MC41IDkxLjEiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+CjxnPgoJPGc+CgkJPGcgaWQ9ImxheWVyM18yMl8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKC05MiwtNjMuOTk5Nzc0KSI+CgkJCTxnIGlkPSJsYXllcjVfMjJfIj4KCQkJCTxnIGlkPSJwYXRoMjU1NF8zOF8iPgoJCQkJCTxwYXRoIGZpbGw9IiM2OEIwNDQiIGQ9Ik0xNzYuOSw3MC44bC0yLjQsOS42YzMuNC02LjgsOC45LTExLjksMTUuMi0xNi40Yy00LjYsNS4zLTguOCwxMC42LTExLjMsMTYgICAgICAgYzQuMy02LjEsMTAuMS05LjQsMTYuNi0xMS43Yy04LjcsNy43LTE1LjYsMTYuMS0yMC44LDI0LjRsLTQuMi0xLjhDMTcwLjcsODQuMiwxNzMuMiw3Ny40LDE3Ni45LDcwLjhMMTc2LjksNzAuOHoiLz4KCQkJCTwvZz4KCQkJCTxnIGlkPSJwYXRoMjUzNF8xM18iPgoJCQkJCTxwYXRoIGZpbGw9IiNGNUY4REUiIGQ9Ik0xNjUuOCw4OS4xbDcuOSwzLjNjMCwyLTAuMiw4LjIsMS4xLDEwYzEzLjIsMTcsMTEsNTEuMi0yLjcsNTJjLTIwLjgsMC0yOC44LTE0LjEtMjguOC0yNy4xICAgICAgIGMwLTExLjksMTQuMi0xOS43LDIyLjctMjYuN0MxNjguMyw5OC43LDE2Ny45LDk0LjUsMTY1LjgsODkuMUwxNjUuOCw4OS4xeiIvPgoJCQkJPC9nPgoJCQkJPGcgaWQ9InBhdGgyNTM2XzIzXyI+CgkJCQkJPHBhdGggZmlsbD0iIzdFNDc5OCIgZD0iTTE3My43LDkyLjNsMi45LDEuNWMtMC4zLDEuOSwwLjEsNi4xLDIsNy4xYzguNCw1LjIsMTYuMiwxMC44LDE5LjMsMTYuNWMxMSwxOS45LTcuNywzOC40LTI0LDM2LjYgICAgICAgYzguOC02LjUsMTEuNC0xOS45LDguMS0zNC42Yy0xLjMtNS43LTMuNC0xMC45LTcuMS0xNi44QzE3My4zLDk5LjksMTczLjksOTYuMywxNzMuNyw5Mi4zTDE3My43LDkyLjN6Ii8+CgkJCQk8L2c+CgkJCTwvZz4KCQkJPGcgaWQ9ImxheWVyNF8yMl8iPgoJCQkJPGcgaWQ9InBhdGgyNTQwXzIzXyI+CgkJCQkJPHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTE3MC41LDEwMS44Yy0wLjYsMy4xLTEuMyw4LjctNCwxMC44Yy0xLjEsMC44LTIuMywxLjYtMy41LDIuNGMtNC45LDMuMy05LjcsNi40LTExLjksMTQuMyAgICAgICBjLTAuNSwxLjctMC4xLDMuNSwwLjMsNS4yYzEuMiw0LjksNC42LDEwLjEsNy4zLDEzLjJjMCwwLjEsMC41LDAuNSwwLjUsMC42YzIuMiwyLjYsMi45LDMuNCwxMS4zLDUuM2wtMC4yLDAuOSAgICAgICBjLTUuMS0xLjMtOS4yLTIuNi0xMS45LTUuNmMwLTAuMS0wLjUtMC41LTAuNS0wLjVjLTIuOC0zLjItNi4zLTguNi03LjUtMTMuN2MtMC41LTItMC45LTMuNi0wLjMtNS43ICAgICAgIGMyLjMtOC4yLDcuMy0xMS41LDEyLjMtMTQuOWMxLjEtMC43LDIuNS0xLjQsMy42LTIuM0MxNjguMywxMTAuMywxNjkuNCwxMDUuNiwxNzAuNSwxMDEuOEwxNzAuNSwxMDEuOHoiLz4KCQkJCTwvZz4KCQkJCTxnIGlkPSJwYXRoMjU0Ml8yM18iPgoJCQkJCTxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik0xNzIuNywxMTQuOGMwLjEsMy41LTAuMyw1LjMsMC42LDcuOGMwLjUsMS41LDIuNCwzLjUsMi45LDUuNWMwLjcsMi42LDEuNSw1LjUsMS41LDcuMyAgICAgICBjMCwyLTAuMSw1LjgtMSw5LjhjLTAuNywzLjMtMi4yLDYuMi00LjgsNy44Yy0yLjctMC41LTUuOC0xLjUtNy42LTMuMWMtMy42LTMuMS02LjctOC4zLTcuMS0xMi44Yy0wLjMtMy43LDMuMS05LjIsNy45LTExLjkgICAgICAgYzQtMi40LDUtNSw1LjktOS40Yy0xLjIsMy44LTIuNCw2LjktNi4zLDljLTUuNywzLTguNiw3LjktOC4zLDEyLjdjMC40LDYuMSwyLjgsMTAuMiw3LjYsMTMuNWMyLDEuNCw1LjgsMi45LDguMiwzLjN2LTAuMyAgICAgICBjMS44LTAuMyw0LjEtMy4zLDUuMy03LjJjMS0zLjYsMS40LTguMSwxLjMtMTFjLTAuMS0xLjctMC44LTUuMy0yLjItOC42Yy0wLjctMS44LTEuOS0zLjYtMi42LTQuOSAgICAgICBDMTczLjEsMTIwLjgsMTczLjEsMTE4LDE3Mi43LDExNC44eiIvPgoJCQkJPC9nPgoJCQkJPGcgaWQ9InBhdGgyNTQ0XzIzXyI+CgkJCQkJPHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTE3Mi4xLDEyOC41YzAuMSwyLjQsMSw1LjQsMS40LDguNWMwLjMsMi4zLDAuMiw0LjYsMC4xLDYuNmMtMC4xLDIuMy0wLjgsNi41LTEuOSw4LjYgICAgICAgYy0xLTAuNS0xLjQtMS0yLjEtMS44Yy0wLjgtMS4xLTEuNC0yLjMtMS45LTMuNmMtMC40LTEtMC45LTIuMi0xLjEtMy41Yy0wLjMtMi0wLjItNS4yLDIuMS04LjRjMS44LTIuNiwyLjItMi44LDIuOC01LjcgICAgICAgYy0wLjgsMi42LTEuNCwyLjktMy4zLDUuMWMtMi4xLDIuNC0yLjQsNi0yLjQsOC45YzAsMS4yLDAuNSwyLjYsMSwzLjhjMC41LDEuMywxLDIuNywxLjcsMy43YzEuMSwxLjYsMi41LDIuNiwzLjIsMi43ICAgICAgIGMwLDAsMCwwLDAsMGMwLDAsMCwwLDAsMHYtMC4xYzEuMy0xLjUsMi4xLTIuOSwyLjQtNC40YzAuMy0xLjgsMC40LTMuNSwwLjYtNS42YzAuMi0xLjgsMC4xLTQuMS0wLjQtNi41ICAgICAgIEMxNzMuNywxMzMuOCwxNzIuNiwxMzAuNywxNzIuMSwxMjguNUwxNzIuMSwxMjguNXoiLz4KCQkJCTwvZz4KCQkJCTxnIGlkPSJwYXRoMjU1MF8yM18iPgoJCQkJCTxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik0xNzIuNSw5OWMwLjEsMy41LDAuMywxMCwxLjMsMTIuNmMwLjMsMC45LDIuOCw0LjcsNC41LDkuNGMxLjIsMy4yLDEuNSw2LjIsMS43LDcuMSAgICAgICBjMC44LDMuOC0wLjIsMTAuMy0xLjUsMTYuNGMtMC43LDMuMy0zLDcuNC01LjYsOWwtMC41LDAuOWMxLjUtMC4xLDUuMS0zLjYsNi40LTguMWMyLjItNy41LDMtMTEsMi0xOS40ICAgICAgIGMtMC4xLTAuOC0wLjUtMy42LTEuOC02LjVjLTEuOS00LjUtNC42LTguOC00LjktOS43QzE3My40LDEwOS4zLDE3Mi42LDEwMy4xLDE3Mi41LDk5TDE3Mi41LDk5eiIvPgoJCQkJPC9nPgoJCQkJPGcgaWQ9InBhdGgyNTUyXzIzXyI+CgkJCQkJPHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTE3My43LDkyLjZjLTAuMiwzLjYtMC4yLDYuNCwwLjQsOS4xYzAuNywyLjksNC41LDcuMSw2LjEsMTEuOWMzLDkuMiwyLjIsMjEuMiwwLjEsMzAuNSAgICAgICBjLTAuOCwzLjMtNC42LDguMS04LjUsOS42bDIuOCwwLjdjMS41LTAuMSw1LjUtMy44LDcuMS04YzIuNS02LjcsMy0xNC42LDItMjNjLTAuMS0wLjgtMS40LTgtMi43LTExICAgICAgIGMtMS44LTQuNS00LjctNy43LTUuNy0xMC41Yy0wLjgtMi4xLTEuMS03LjctMC42LTguOEwxNzMuNyw5Mi42eiIvPgoJCQkJPC9nPgoJCQk8L2c+CgkJPC9nPgoJCTxnIGlkPSJwYXRoMjUyOF8xOF8iPgoJCQk8cGF0aCBmaWxsPSIjN0U0Nzk4IiBkPSJNMy44LDguOGg1NC4xYzIsMCwzLjgsMS43LDMuOCwzLjh2MTZjMCwyLjEtMS44LDMuOC0zLjgsMy44SDQ2LjhjLTIuNSwwLTMuNiwxLjQtMy42LDN2NTIuMyAgICAgYzAsMS44LTEuNCwzLjEtMy4xLDMuMUgyMS43Yy0xLjcsMC0zLTEuMy0zLTMuMVYzNC45YzAtMS42LTEuNS0yLjYtMi42LTIuNkgzLjhjLTIuMSwwLTMuOC0xLjctMy44LTMuOHYtMTYgICAgIEMwLDEwLjUsMS43LDguOCwzLjgsOC44eiIvPgoJCTwvZz4KCQk8ZyBpZD0icGF0aDI1MzJfMThfIj4KCQkJPHBhdGggZmlsbD0iIzdFNDc5OCIgZD0iTTE0Mi42LDMwaDQuOGMxLjgsMCwzLjIsMS40LDMuMiwzLjF2MTcuMWMwLDIuMiwwLjEsMy4xLTIuNiwzLjFjLTUuMywwLTcuNywyLjgtNy43LDUuOXYyOC45ICAgICBjMCwxLjMtMS4zLDIuNS0yLjgsMi41aC0xNy4yYy0xLjUsMC0yLjgtMS4xLTIuOC0yLjVWNTUuMmMwLTAuNiwwLTEuNCwwLjEtMS45YzAuOS0xMi4yLDEwLjUtMjEuOSwyMi42LTIzLjIgICAgIEMxNDAuNSwzMC4xLDE0MS45LDMwLDE0Mi42LDMwTDE0Mi42LDMweiIvPgoJCTwvZz4KCTwvZz4KCTxnPgoJCTxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik0xMDEuNyw0Ni4zYy0yLjktMi42LTYuNS00LjgtMTAuMy02LjljLTEuNy0wLjktNi45LTUtNS4xLTEwLjhsLTEzLjEtNS40bC0wLjksMC43ICAgIGM0LjQsNy45LDIuMSwxMi4xLTAuMSwxMy41Yy00LjQsMy0xMC44LDYuOC0xMy45LDEwLjFjLTYuMSw2LjMtNy45LDEyLjMtNy4zLDIwLjFjMC42LDEwLjEsNy45LDE4LjUsMTcuOCwyMS44ICAgIGM0LjMsMS40LDguMywxLjYsMTIuNywxLjZjNy4xLDAsMTQuNS0xLjksMTkuOC02LjNjNS43LTQuNyw5LTExLjgsOS0xOS4xQzExMC4zLDU4LjMsMTA3LjIsNTEuMywxMDEuNyw0Ni4zeiBNOTkuOCw4My4yICAgIGMtNC45LDQtMTMuNyw2LjgtMTguNCw2LjZjLTUuMi0wLjMtMTAuMy0xLjEtMTQuOC0zLjNjLTcuOS0zLjgtMTMuMS0xMi4xLTEzLjUtMTguOEM1Mi40LDU0LDU5LDUwLjEsNjUuMSw0NS4xICAgIGMzLjQtMi44LDguMi00LjIsMTAuOS05LjJjMC41LTEuMSwwLjgtMy41LDAuMi02Yy0wLjMtMC45LTEuNS0zLjktMi00LjZsOS44LDQuM2MtMS4yLDQuNSwyLjUsOS4yLDUuNSwxMC45ICAgIGMzLDEuNyw3LjcsNC45LDEwLjYsNy41YzUuMSw0LjUsNy43LDEwLjksNy43LDE3LjZDMTA3LjgsNzIuMywxMDUsNzguOSw5OS44LDgzLjJ6Ii8+Cgk8L2c+CjwvZz4KPC9zdmc+", 2972 | "created": 1712908575400, 2973 | "lastRetrieved": 1712910044713 2974 | }, 2975 | "3c0354edb1c6699d5dddc39861f82e84751e6663": { 2976 | "mimeType": "image/svg+xml", 2977 | "id": "3c0354edb1c6699d5dddc39861f82e84751e6663", 2978 | "dataURL": "data:image/svg+xml;base64,PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIiBpZD0ic3ZnMjk4NSIgdmVyc2lvbj0iMS4xIiBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjQgcjk5MzkiIHdpZHRoPSI0ODUuMzM2MjciIGhlaWdodD0iNDg1LjMzNjI3IiBzb2RpcG9kaTpkb2NuYW1lPSI2MDBweC1GcmFuY2Vfcm9hZF9zaWduX0Ixai5zdmdbMV0ucG5nIj4KICA8bWV0YWRhdGEgaWQ9Im1ldGFkYXRhMjk5MSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgICAgICA8ZGM6dGl0bGUvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcyBpZD0iZGVmczI5ODkiLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3IHBhZ2Vjb2xvcj0iI2ZmZmZmZiIgYm9yZGVyY29sb3I9IiM2NjY2NjYiIGJvcmRlcm9wYWNpdHk9IjEiIG9iamVjdHRvbGVyYW5jZT0iMTAiIGdyaWR0b2xlcmFuY2U9IjEwIiBndWlkZXRvbGVyYW5jZT0iMTAiIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIiBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIiBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyNzIiIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijc0NSIgaWQ9Im5hbWVkdmlldzI5ODciIHNob3dncmlkPSJmYWxzZSIgaW5rc2NhcGU6c25hcC1nbG9iYWw9InRydWUiIGlua3NjYXBlOnNuYXAtZ3JpZHM9InRydWUiIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSIgaW5rc2NhcGU6YmJveC1wYXRocz0idHJ1ZSIgaW5rc2NhcGU6YmJveC1ub2Rlcz0idHJ1ZSIgaW5rc2NhcGU6c25hcC1iYm94LWVkZ2UtbWlkcG9pbnRzPSJ0cnVlIiBpbmtzY2FwZTpzbmFwLWJib3gtbWlkcG9pbnRzPSJ0cnVlIiBpbmtzY2FwZTpvYmplY3QtcGF0aHM9InRydWUiIGlua3NjYXBlOnNuYXAtaW50ZXJzZWN0aW9uLXBhdGhzPSJ0cnVlIiBpbmtzY2FwZTpvYmplY3Qtbm9kZXM9InRydWUiIGlua3NjYXBlOnNuYXAtc21vb3RoLW5vZGVzPSJ0cnVlIiBpbmtzY2FwZTpzbmFwLW1pZHBvaW50cz0idHJ1ZSIgaW5rc2NhcGU6c25hcC1vYmplY3QtbWlkcG9pbnRzPSJ0cnVlIiBpbmtzY2FwZTpzbmFwLWNlbnRlcj0iZmFsc2UiIGZpdC1tYXJnaW4tdG9wPSIwIiBmaXQtbWFyZ2luLWxlZnQ9IjAiIGZpdC1tYXJnaW4tcmlnaHQ9IjAiIGZpdC1tYXJnaW4tYm90dG9tPSIwIiBpbmtzY2FwZTp6b29tPSIwLjU5OTcwMTc2IiBpbmtzY2FwZTpjeD0iMzkwLjU2NDk5IiBpbmtzY2FwZTpjeT0iMjQ0LjM0MzY1IiBpbmtzY2FwZTp3aW5kb3cteD0iODYiIGlua3NjYXBlOndpbmRvdy15PSItOCIgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIj4KICAgIDxpbmtzY2FwZTpncmlkIHR5cGU9Inh5Z3JpZCIgaWQ9ImdyaWQyOTk1IiBlbXBzcGFjaW5nPSI1IiB2aXNpYmxlPSJ0cnVlIiBlbmFibGVkPSJ0cnVlIiBzbmFwdmlzaWJsZWdyaWRsaW5lc29ubHk9InRydWUiIG9yaWdpbng9Ii01Ny4zMzE4NnB4IiBvcmlnaW55PSItNTcuMzMxODZweCIvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxnIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiIGlkPSJsYXllcjEiIGlua3NjYXBlOmxhYmVsPSIxIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01Ny4zMzE4NiwtNTcuMzMxODYpIj4KICAgIDxwYXRoIHNvZGlwb2RpOnR5cGU9ImFyYyIgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgaWQ9InBhdGgyOTk3IiBzb2RpcG9kaTpjeD0iMzAwIiBzb2RpcG9kaTpjeT0iMzAwIiBzb2RpcG9kaTpyeD0iMjQwIiBzb2RpcG9kaTpyeT0iMjQwIiBkPSJNIDU0MCwzMDAgQyA1NDAsNDMyLjU0ODM0IDQzMi41NDgzNCw1NDAgMzAwLDU0MCAxNjcuNDUxNjYsNTQwIDYwLDQzMi41NDgzNCA2MCwzMDAgNjAsMTY3LjQ1MTY2IDE2Ny40NTE2Niw2MCAzMDAsNjAgNDMyLjU0ODM0LDYwIDU0MCwxNjcuNDUxNjYgNTQwLDMwMCB6IiB0cmFuc2Zvcm09Im1hdHJpeCgxLjAwNTg3ODMsMCwwLDEuMDA1ODc4MywtMS43NjM0OSwtMS43NjM0OSkiLz4KICAgIDxwYXRoIHNvZGlwb2RpOnR5cGU9ImFyYyIgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojZmYwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgaWQ9InBhdGg0MDA1IiBzb2RpcG9kaTpjeD0iMzA0Ljc1IiBzb2RpcG9kaTpjeT0iMjE0Ljc1IiBzb2RpcG9kaTpyeD0iNDQuNzUiIHNvZGlwb2RpOnJ5PSI0NC43NSIgZD0ibSAzNDkuNSwyMTQuNzUgYyAwLDI0LjcxNDc0IC0yMC4wMzUyNiw0NC43NSAtNDQuNzUsNDQuNzUgLTI0LjcxNDc0LDAgLTQ0Ljc1LC0yMC4wMzUyNiAtNDQuNzUsLTQ0Ljc1IDAsLTI0LjcxNDc0IDIwLjAzNTI2LC00NC43NSA0NC43NSwtNDQuNzUgMjQuNzE0NzQsMCA0NC43NSwyMC4wMzUyNiA0NC43NSw0NC43NSB6IiB0cmFuc2Zvcm09Im1hdHJpeCg1LjEzNjQ0MTEsMCwwLDUuMTM2NDQxMSwtMTI2NS4zMzA0LC04MDMuMDUwNzMpIi8+CiAgICA8cmVjdCBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiBpZD0icmVjdDQwMDEiIHdpZHRoPSIzNDUiIGhlaWdodD0iODAuNTk5OTk4IiB4PSIxMjcuNSIgeT0iMjU5LjcwMDAxIi8+CiAgPC9nPgo8L3N2Zz4=", 2979 | "created": 1712910185210, 2980 | "lastRetrieved": 1712910185210 2981 | }, 2982 | "bc967b68117a93ee92d3564a56d233dbedc82486": { 2983 | "mimeType": "image/svg+xml", 2984 | "id": "bc967b68117a93ee92d3564a56d233dbedc82486", 2985 | "dataURL": "data:image/svg+xml;base64,PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIiB3aWR0aD0iMjEwbW0iIGhlaWdodD0iMjk3bW0iIHZpZXdCb3g9IjAgMCAyMTAgMjk3IiB2ZXJzaW9uPSIxLjEiIGlkPSJzdmczMSIgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi41ICgyMDYwZWMxZjlmLCAyMDIwLTA0LTA4KSIgc29kaXBvZGk6ZG9jbmFtZT0icm9sbGVyLnN2ZyI+CiAgPGRlZnMgaWQ9ImRlZnMyNSIvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcgaWQ9ImJhc2UiIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIgYm9yZGVyY29sb3I9IiM2NjY2NjYiIGJvcmRlcm9wYWNpdHk9IjEuMCIgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIgaW5rc2NhcGU6em9vbT0iMi44IiBpbmtzY2FwZTpjeD0iMjE0LjkxMDEyIiBpbmtzY2FwZTpjeT0iOTQyLjI0NTg4IiBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIgc2hvd2dyaWQ9ImZhbHNlIiBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjE0MDMiIGlua3NjYXBlOndpbmRvdy14PSIwIiBpbmtzY2FwZTp3aW5kb3cteT0iMCIgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIvPgogIDxtZXRhZGF0YSBpZD0ibWV0YWRhdGEyOCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgICAgICA8ZGM6dGl0bGUvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZyBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIgaWQ9ImxheWVyMSI+CiAgICA8ZyBpZD0iZzQzIiB0cmFuc2Zvcm09InJvdGF0ZSgxMDUuMDg1ODEsNjYuNTIzODEsNjkuNDU4MzM0KSI+CiAgICAgIDxwYXRoIGQ9Ik0gNjYuNDgwNzQ4LDY5LjI3MDc3NiBDIDY1LjM4ODM4OSw2OS4zNDYwMzcgNjMuMzUyODQ0LDcwLjI4MTk4NyA2My4wNjc4ODgsNzAuNTc1NzAxIDYyLjk5MTg5NCw3MC42NTQwMiA2Mi45Nzc0MTMsNzAuNzQ5MzczIDYyLjk5NzYyMiw3MC44NDY3MTQgNjIuOTg0MDQ5LDcwLjg2NTU1MiA2Mi44NDQ1OTUsNzEuMDY3MTk2IDYyLjgzNzAxOCw3MS4xOTgwMjcgNjIuODE4NTIzLDcxLjUxNzkzNSA2My4wNTgwNzQsNzEuODA5MjY4IDYzLjAzNzc3Myw3Mi4xMzE1MyA2My4wMTUyMDQsNzIuNDg5Njk3IDYyLjY4NjQ1OSw3My4xNjU0MTYgNjIuNjg2NDU5LDczLjE2NTQxNiBMIDYxLjkxMzU1OCw3My4zNjYxNzEgNjEuNjkyNzI2LDczLjI4NTg2OCBDIDYxLjc4OTAzNSw3My4xNzM2OTIgNjEuNzkzMjk1LDczLjE2NjMxNiA2MS44NjMzNjksNzIuOTg0NzQ1IDYxLjkxNjUzNyw3Mi44NDY5NzQgNjEuNTcyMjc1LDcyLjY3MzU2OSA2MS41NzIyNzUsNzIuNjczNTY5IDYxLjU3MjI3NSw3Mi42NzM1NjkgNjEuNTg4NzU4LDcyLjUyMzIyNyA2MS40OTE5NzEsNzIuNTQzMDc2IEwgNjEuMjQxMDI3LDcyLjU5MzI2NSBDIDYxLjExNTE5MSw3Mi41NTkyNzcgNjEuMDQ1ODg5LDcyLjQ1MjYxIDYwLjg0OTU1LDcyLjUwMjkyNiA2MC44NDk1NSw3Mi41MDI5MjYgNjAuNzU1NjUyLDcyLjM5NTM3OCA2MC42Nzg5MDcsNzIuMzYyMzk4IDYwLjMyNjI5Niw3Mi4yMTA4MjMgNjAuMzAyMTY2LDcyLjY2MTA1OSA2MC4xMzY4ODEsNzIuNjQzNDY1IDYwLjIyODE1NCw3Mi42ODgyNDUgNjAuMzAwNTQ0LDcyLjY5MTgxMiA2MC4zNDc2NzUsNzIuNjczNTggNjAuMjQ2MTEyLDcyLjc3OTYzOCA2MC4wOTM5NTIsNzIuOTM3NjU4IDYwLjAyNjQ3LDczLjA4NTEzOSA1OS43NTI1NDcsNzMuNjgzNTQ3IDYwLjA3MDEwMyw3My45NzY1NzMgNTkuOTg2MzIzLDc0LjUxMDUwMiA2MC4wOTEzNjUsNzQuNDUxMTAzIDYwLjEzOTc5NCw3NC4zNjI3OTYgNjAuMTY3MDA0LDc0LjI3OTYzMiA2MC4xMjg4OTksNzQuNjgyNDYgNjAuMzE5NTY1LDc0LjQ3OTM4NSA2MC4zNjc3NTcsNzQuNzYxNDM4IDYwLjUyMTQ3NCw3NC4zNTYyMDMgNjAuMzEwMDA2LDc0LjU5MzQxNyA2MC42ODg5NjEsNzQuMjU5NTUgNjAuNTQ2ODg3LDc0LjQ0NTc4IDYwLjY5NzAwNCw3NC43MzI3NTggNjAuNDg4MjA4LDc0Ljg0MTczOSA2MC44MjIxNjUsNzQuNzk2MTA0IDYwLjk3MjEwNSw3NC4zNjcxODMgNjEuMTgwODA4LDc0LjA2ODgzOSA2MS4yODk5OTYsNzMuOTEyNzg1IDYxLjE1MDk5Miw3NC4wNDgwOTUgNjEuMjUxMDczLDczLjgzNzk3MSA2MS4zNTExMzksNzMuNjI3NzUyIDYxLjY5Mjc0Miw3My43NTc2NjUgNjEuNjkyNzQyLDczLjc1NzY2NSA2MS42OTI3NDIsNzMuNzU3NjY1IDYxLjc2MjY4NSw3NC4wODc2NTMgNjEuODgzNDU5LDc0LjE4OTMwNiA2Mi4wMTEyMzIsNzQuMjk2ODQzIDYyLjM2NTI2NSw3NC4zMDk3NiA2Mi4zNjUyNjUsNzQuMzA5NzYgTCA2Mi42MTYyMSw3NC40MjAxNzMgQyA2Mi4yNDY3OTgsNzQuNDUwMDQgNjEuOTAxODYxLDc0LjUxNTg2NSA2MS43ODMwNjMsNzQuNTkwODE3IDYxLjYxNjgzMyw3NC42OTU3MDMgNjEuNTA3OTQ5LDc0Ljc3OTA2NSA2MS40MjE2OTUsNzQuODYxODI5IDYxLjM3NDgzNyw3NC44NTc0MTEgNjEuMjc0MzczLDc0Ljg1NTE2MiA2MS4yNTEwNTIsNzQuODUxODAyIDYxLjA2MDE2MSw3NC44MjQxOTUgNjAuNjcxMDg1LDc1LjU5NzI2NSA2MC45NDk5Myw3NS42ODQ5NDggTCA2Mi42NzY0NDIsNzYuMjI3IEMgNjIuNTk2NjQxLDc2LjI5NDgwNyA2Mi41MTAyODYsNzYuNDMyMjIxIDYyLjQ5NTc2MSw3Ni40NTc4NyA2Mi40NzY0Miw3Ni40OTIwNjUgNjIuMDIzOTgyLDc3Ljc1Mjc0MSA2Mi4wMjM5ODIsNzcuNzUyNzQxIEwgNjEuOTIzNjA0LDc3LjY0MjMyNSA2MS43MzI4ODUsNzcuNzIyNjI5IDYwLjgwOTQxLDc3LjY0MjMyNSA2MC44OTk3NDksNzcuNTAxNzk0IDYwLjcwOTAyOSw3Ny4zNzEzMDQgQyA2MC43MDkwMjksNzcuMzcxMzA0IDYwLjg4MTc2Myw3Ni4yODg4MTQgNjAuODU5NTk2LDc2LjE0NjcwNyA2MC44MTM2ODUsNzUuODUyMDY3IDYwLjI3NzQwNyw3NS4yNjMzNjkgNjAuMjc3NDA3LDc1LjI2MzM2OSA2MC4zNDY0NjYsNzUuMTIyNjQ4IDYwLjI1NTEyOSw3NC45NzYxOSA2MC4xOTcxMDMsNzQuODkxOTczIDYwLjE0OTM0OCw3NC44MjI1MjggNjAuMTE3MjY4LDc0Ljc3NzYxNSA2MC4xMDY3NjQsNzQuODIxNzA4IDYwLjA4MDE3LDc0LjkzMzg2MiA2MC4xNjQxMjUsNzUuMDU4NDg5IDYwLjA5NjczNiw3NS4wNzI2NTIgNjAuMDk2NzM2LDc1LjA3MjY1MiA2MC4wNzMwNTYsNzUuMTQyODggNTkuOTU2MjA4LDc1LjA0MjU0IDU5Ljg5OTUxMyw3NC45OTM4NTkgNTkuOTI2MDk1LDc0Ljc1MTQ0NSA1OS45MjYwOTUsNzQuNzUxNDQ1IDU5LjkwNzQ2OSw3NC43MjMyMTEgNTkuODk4MzgsNzQuNjYyNjY0IDU5Ljg0NTc5Miw3NC43NDE0MTcgTCA1OS44MjU3MSw3NS4wMDI0MDIgQyA1OS44MjU3MSw3NS4wMDI0MDIgNTkuNzc2NDY2LDc0Ljk1NTQ0NCA1OS43NjU0OCw3NC44ODE5NDggNTkuNzQ5NzY0LDc0Ljc3ODMyOSA1OS43Nzk1Myw3NC42MzM1NDQgNTkuNzE1Mjk0LDc0LjY4MTE5MyA1OS42MzM3MzEsNzQuNzQxNjk1IDU5LjczOTc0Miw3NC45NzY0NjggNTkuNzQ1NDA2LDc1LjAyMjQ3OSA1OS43NTA5MzYsNzUuMDY4NTA4IDU5LjU3NTQzOCw3NC45MjY4MTEgNTkuNTU0Njg5LDc0Ljg1MTgzNiA1OS41MzM5NDYsNzQuNzc2ODYxIDU5LjQ5NTIsNzQuODI2MDY1IDU5LjUxNDUzOSw3NC45MjIwOTkgNTkuNTMzOTA2LDc1LjAxODExOSA1OS45OTA3MzYsNzUuMzMyNTIgNjAuMTY3MDAxLDc1LjM4Mzg0OSA2MC4yODg1MDYsNzUuNDE5MjI0IDYwLjU1NjQxNSw3NS44Mzc0MjUgNjAuNjE4Njk4LDc2LjEyNjY0MSA2MC42NzU5ODgsNzYuMzkyNTQ3IDYwLjUyODM1OSw3Ni45NTk3ODcgNjAuNTI4MzU5LDc2Ljk1OTc4NyA2MC40Njk2MTMsNzYuNDM0MjcyIDYwLjQ1MTMxMiw3NS44OTE0IDU5Ljg4NTk1LDc1LjY4NDk3MiA1OS44OTQ5Miw3NS42MTMyOTEgNTkuNzQwOTUxLDc1LjUwOTUyOSA1OS42NTUwOCw3NS41MDQyOTMgNTkuNDcxOTIyLDc1LjQ5MzEwMSA1OS4zMzM4NzYsNzUuMzEzNTc0IDU5LjMzMzg3Niw3NS4zMTM1NzQgNTkuMzExNDM5LDc1LjE1MDY4OCA1OS4xODg4MSw3NS4wNjAxNDggNTkuMjIzNDYsNzUuMjYzMzg1IDU5LjI2NTYxOSw3NS4zMzc3MDYgNTkuMzAzNzYxLDc1LjQzNDAyOCA1OS4zMDM3NjEsNzUuNDM0MDI4IDU5LjMwMzc2MSw3NS40MzQwMjggNTkuMTIzMzg3LDc1LjIyMDg4NyA1OS4wOTI5NjgsNzUuMTYzMDE1IDU5LjA2MjU4LDc1LjEwNTMzOCA1OC45OTM0NzQsNzUuMTI0NTgyIDU5LjAwMjYyOCw3NS4xODMwOTcgNTkuMDExNjI0LDc1LjI0MTYzMSA1OS4xOTMzNDgsNzUuNTA0MzAxIDU5LjE5MzM0OCw3NS41MDQzMDEgNTkuMTkzMzQ4LDc1LjUwNDMwMSA1OS4wMTU3MDQsNzUuMzk5OTQ5IDU4Ljk2MjQ3NSw3NS4zNjM3NzMgNTguOTA5MjQ2LDc1LjMyNzYzOSA1OC44NzEwNjIsNzUuMjkyMDkyIDU4Ljg2MjEsNzUuMzYzNzczIDU4Ljg1MzEzMSw3NS40MzU0NTkgNTkuMTIwMDY5LDc1LjU2ODE5IDU5LjE5MzM1OCw3NS42MjQ3NTggNTkuMjY2NjMyLDc1LjY4MTMyMSA1OS43ODU2MjgsNzUuNzgzNjY0IDYwLjA1NjYxNCw3NS45NTYwMTYgNjAuMzI3NjAxLDc2LjEyODM1NSA2MC4zMjE3MDEsNzcuMTA3Nzc0IDYwLjI5NzUyMyw3Ny4xNTA1MDQgNjAuMjczMzQsNzcuMTkzMjU2IDYwLjE4NzEwNyw3Ny4xMjAzOTIgNjAuMTg3MTA3LDc3LjEyMDM5MiBMIDYwLjA3NjY5MSw3Ny4yOTEwMzIgSCA1OS45NzYzMTMgTCA1OS45MDYwNDgsNzcuNTMxOTQxIDU5LjcxNTMzMSw3Ny41OTIxNjggNTkuMzUzOTYzLDc3LjQzMTU2MyBDIDU5LjM1Mzk2Myw3Ny40MzE1NjMgNTkuNTg5NzYsNzcuMDYwNzUgNTkuNjI0OTc2LDc2Ljk3OTg2NiA1OS42NjAyMDIsNzYuODk4OTgxIDU5LjMzMzg4MSw3Ni43NDg5OTkgNTkuMzMzODgxLDc2Ljc0ODk5OSA1OS4zMzM4ODEsNzYuNzQ4OTk5IDU5LjMyMDMzNSw3Ni42MjY3MyA1OS4yODM2OSw3Ni41OTg0MzMgNTkuMjQ3MDUsNzYuNTcwMTQ2IDU5LjA1NzgxOCw3Ni42Mjg3MDMgNTguOTYyNDg2LDc2LjY0ODYxOSA1OC44NjcxMTcsNzYuNjY4MzMgNTguOTU2NDI3LDc2LjU0ODI1MiA1OC42MjEyLDc2LjUwODA5MSA1OC41MjMyMjcsNzYuNDk2MjExIDU4LjM4MDI5NCw3Ni41NDgyNDEgNTguMzgwMjk0LDc2LjU0ODI0MSA1OC4zODAyOTQsNzYuNTQ4MjQxIDU4LjE5NzkwNiw3Ni41NTQ5MDkgNTguMTA5MjgxLDc2LjU4ODM5NCA1Ny45NzcwMDgsNzYuNjM4MzM3IDU3Ljc0NzkxMyw3Ni44MTkyNjIgNTcuNzQ3OTEzLDc2LjgxOTI2MiBMIDU3Ljc5ODEwMiw3Ni44NDkzNzQgNTcuNjg3Njg2LDc2Ljk5OTk0MyA1Ny43NTc5NTEsNzcuMDMwMDU1IEMgNTcuNjk5NzA5LDc3LjE3Mzc5MyA1Ny41NzU1MDMsNzcuMzE1NTQxIDU3LjU5NzM0Nyw3Ny40NzE3MjQgTCA1Ny43NDc5MTMsNzcuNDQxNjEyIEMgNTcuNjUwNzE2LDc3LjcxMDY2NyA1Ny43MjYyNDQsNzcuNjkwMDQ1IDU3LjcyNzgzMSw3Ny43NTI3ODggNTcuNzY3NDQyLDc3LjY5NzI3NCA1Ny43NjA5ODQsNzcuNTcyOTExIDU3Ljg1ODMyMSw3Ny42MTIyNiA1Ny44MTc5NjIsNzcuNzgxMjg0IDU3Ljg0MDQ2Miw3Ny45MzAzNDIgNTcuODk4NDcyLDc4LjA3NDAxMSA1Ny45ODI4NzksNzcuOTE4NTEgNTguMDU2OTQxLDc3Ljg2NTczOSA1OC4xMjkzNDIsNzcuODUzMTc5IEwgNTguMTA5MjYsNzcuOTgzNjcyIDU4LjIyOTcxMiw3Ny44ODMyOTQgQyA1OC4yMDM1NzEsNzguMDEwMTI1IDU4LjIyMjc3OSw3OC4wNTM1MzggNTguMjM5NzM5LDc4LjEwNDEyMyA1OC4yODA5MDMsNzguMDA3MTM1IDU4LjMxNTk3Niw3Ny44ODEzMTggNTguNDcwNjA3LDc3Ljg1MzE3OSBMIDU4LjQzMDQ1OSw3Ny45OTM3MDcgQyA1OC40OTQwODMsNzguMDQ1MjM1IDU4Ljg4NjY1Myw3Ny43MDcxOSA1OC45NTI0MjksNzcuNzMyNzI4IDU5LjAzODUzLDc3Ljc2NjE4NCA1OS4zNTM5MzQsNzguMDg0MDQxIDU5LjM1MzkzNCw3OC4wODQwNDEgNTkuMzUzOTM0LDc4LjA4NDA0MSA1OS40OTA4LDc4LjI3MTc0IDU5LjU4NDgwMiw3OC4zMzQ5ODYgNTkuODA2NTIsNzguNDg0MTY4IDYwLjE3Njk5Miw3OC42MjY3NDIgNjAuNTA4Mjc3LDc4LjczNjQ5MSA2MC4xODY3NTUsNzguNzY5MzMxIDU5Ljg5MTUzMyw3OC44MjAxODEgNTkuNzg1NTQxLDc4Ljg4NzA1NyA1OS42MzMwNjQsNzguOTgzMjY1IDU5LjUyODU1OSw3OS4wNzAwNjcgNTkuNDQ0MjU1LDc5LjE0ODA0IDU5LjI2OTM3OCw3OS4xNDIyOTggNTkuMTQzMTMzLDc5LjEyNzk1OCA1OS4xNDMxMzMsNzkuMTI3OTU4IEwgNTguODQyMDEsODAuMjEyMDM1IEMgNTguNzQ0NzYsODAuNTYzODc4IDYxLjU1MDI4NSw4MS4xNjU2NDYgNjIuNzU2Nzg1LDgxLjM0NjMwNCA2Mi45NjM1OTIsODEuMzc3MjY4IDYzLjIzODY5Nyw4MS4xODc3NjMgNjMuMzE4ODkzLDgxLjAxNTA0NSA2My4zMTk5NTEsODEuMDEyNCA2My4zNzYyNiw4MC44ODA2NTYgNjMuMzc5MTE3LDgwLjg3NDUxNyA2My40NDM3NDksODAuOTQyMTQ3IDYzLjUyNDgwMiw4MC45OTg4MjEgNjMuNjIwMDI1LDgxLjAzNTEyMiA2My45ODExMDIsODEuMTcyNzYzIDY0LjQwNjIzNSw4MC45OTM5NCA2NC41NzM2MSw4MC42MzM2MTcgNjQuNzQwOTg2LDgwLjI3MzI4MSA2NC41OTM0MDEsNzkuODY3ODYgNjQuMjMyMzI0LDc5LjczMDIyMyA2NC4xMzg4OTcsNzkuNjk0NjA4IDY0LjAzNzk4Miw3OS42NzU0NDEgNjMuOTQxMjMsNzkuNjgwMDM1IDYzLjk5Mjc3OCw3OS41Njk0NjUgNjQuMDk3MTY3LDc5LjM0NzUwNiA2NC4xNjIwNTksNzkuMjA4MjU2IDY0LjIwODkwNiw3OS4yNDI2NDkgNjQuMjY0ODczLDc5LjI3NjU2NCA2NC4zMjI2NjQsNzkuMjk4NTkzIDY0LjY4Mzc0LDc5LjQzNjIzNCA2NS4xMDg4NzMsNzkuMjU3NDEzIDY1LjI3NjI0OCw3OC44OTcwODggNjUuNDQzNjI0LDc4LjUzNjc2MiA2NS4yODYwMTEsNzguMTMxMzMgNjQuOTI0OTM1LDc3Ljk5MzY5NCA2NC44NjY5Nyw3Ny45NzE2MDEgNjQuODA0MzMsNzcuOTU5ODE0IDY0Ljc0NDI1Myw3Ny45NTM1NDQgNjUuNTE2MzYsNzYuMjk0MTMgNjYuMTUzNDUxLDc0LjkyNDMyOSA2Ni45NDI1MTcsNzMuMjA1NTk2IDY3LjAwMTYyMyw3My4yNTk3NTYgNjcuMDcyMzE3LDczLjMwNTIxMSA2Ny4xNTMzMTQsNzMuMzM2MDg4IDY3LjUxNDM5MSw3My40NzM3MyA2Ny45NDk1NzgsNzMuMjg0ODY1IDY4LjExNjk1Myw3Mi45MjQ1MjkgNjguMjg0MzI4LDcyLjU2NDE5MyA2OC4xMjY3MTYsNzIuMTY4OCA2Ny43NjU2MzksNzIuMDMxMTYzIDY3LjY4MTc5LDcxLjk5OTE5OSA2Ny41OTE2NTksNzEuOTgwMzUzIDY3LjUwNDY1Niw3MS45ODA5NzIgNjcuNTQzMTQzLDcxLjg5NjIyOCA2Ny41Nzk3NTEsNzEuODE4MTg3IDY3LjYxNTA3Myw3MS43NDAwNjYgNjcuNjg2NTkyLDcxLjg1ODcyOSA2Ny43OTMzNTcsNzEuOTU2NjA0IDY3LjkzNjI3Nyw3Mi4wMTEwNzkgNjguMjk3MzU0LDcyLjE0ODcyIDY4LjcyMjQ4Niw3MS45Njk4OTYgNjguODg5ODYyLDcxLjYwOTU3NCA2OS4wNTcyNCw3MS4yNDkyMzcgNjguODk5NjI1LDcwLjg0MzgxNiA2OC41Mzg1NDgsNzAuNzA2MTggNjguMzgzNTYsNzAuNjQ3MDk5IDY4LjIyMDU5OCw3MC42NDg5MjIgNjguMDY2NzY5LDcwLjY5NjE1MiA2OC4wNzIyNDYsNzAuNjgyMTMgNjguMDkzNjQzLDcwLjYyNTIxOCA2OC4wOTY4ODQsNzAuNjE1ODUxIDY4LjI5NzY5NSw3MC4wMzczNjYgNjcuMTI1NDQsNjkuMjkxODI0IDY2LjY5MTYwMiw2OS4yNzA3ODkgNjYuNjI3OTY1LDY5LjI2NzY5NCA2Ni41NTM2MzYsNjkuMjY1NzYyIDY2LjQ4MDgwOSw2OS4yNzA3ODkgWiBNIDYzLjAwNzU2Myw3MC44NzY4MjMgQyA2My4wMzExNjQsNzAuOTYxNjM4IDYzLjA3NTA3Niw3MS4wNTIyMSA2My4xMzgwNTMsNzEuMTM3ODA2IEwgNjMuMDA3NTYzLDcxLjA5NzY1NSBaIE0gNjMuMTk4MjgsNzEuMjA4MDgyIEMgNjMuMzQxOTY0LDcxLjM4MTUzNCA2My41Mjk0ODUsNzEuNTMwODczIDYzLjYyOTg5NCw3MS42MTk2NDEgNjMuNzc2Njk4LDcxLjc0OTQwNiA2NC4zODUzMzMsNzIuMDAzODk1IDY0LjkyNDc2NSw3Mi4yMTE4ODQgNjQuNzY5NjAzLDcyLjI2NDg0MyA2NC42MDEzOTIsNzIuMzA0OTgzIDY0LjU0MzM0Miw3Mi4zMzIzMzggNjQuMzUwNTA2LDcyLjI0ODA4MiA2NC40NjIwNzgsNzIuMjMyMjc4IDY0LjMyMjUwNyw3Mi4zMjIzMTEgNjQuMTY3Njk0LDcyLjQyMjE1NyA2NC4wNzE1NjYsNzMuNzM3NjQ2IDY0LjA3MTU2Niw3My43Mzc2NDYgTCA2My4yMTgzMzgsNzMuNDY2NjM0IDYzLjMwODY3Nyw3My4zMDYwMjkgNjMuMDY3NzcxLDczLjE4NTU3NyA2My4zMTg3MTUsNzIuMjIxOTM4IDYzLjEwNzkyMiw3MS41Nzk1MyA2My4xOTgyNjEsNzEuMjA4MTM0IFogTSA2NS4zODY1MTYsNzIuNDkyOTI1IEMgNjUuNDYxNDA5LDcyLjQ4NzQ0OCA2NS41MDk1MjQsNzIuNTEyNjYzIDY1LjU0NzEyMSw3Mi41NDMxMTMgTCA2NS42Njc1NzUsNzIuNTAyOTYzIEMgNjUuODI0Nzc1LDcyLjU3ODExIDY1Ljg2ODA5NSw3Mi43MzA3MTQgNjUuODA4MTAzLDcyLjkzNDU3OCA2NS42NDY0MTEsNzIuODYwOTQ0IDY1LjQ3MTM0Miw3Mi44MTI1MjggNjUuMzM2MzI1LDcyLjg0NDIzOCA2NS4zMzAwMjgsNzIuODQ1NTYxIDY1LjMyMjQ2LDcyLjg0MjY1MSA2NS4zMTYyNDMsNzIuODQ0MjM4IEwgNjUuMDQ1MjMsNzIuNjEzMzY4IEMgNjUuMjA3MzQ2LDcyLjUzMDg1NSA2NS4zMTE2MTMsNzIuNDk4NDA3IDY1LjM4NjUxNiw3Mi40OTI5MTQgWiBNIDYzLjAxNzU5Niw3Ni40OTc5MjMgQyA2My4wMTc1OTYsNzYuNDk3OTIzIDYzLjM3NjAyNyw3Ni41MjY3MDQgNjMuNjcwMDU4LDc2LjU0ODExMSA2My44NTUzOTQsNzYuNjI1NzY5IDYzLjc4MjU4OCw3Ni44NTgzODggNjMuNTY5NjgxLDc3LjE1MDM4MiA2My40ODU1MDMsNzcuMTMwMzUzIDYzLjQwODMzMiw3Ny4xMjQwMyA2My4zMzg4MSw3Ny4xNDAzNTUgNjMuMDkyNjY2LDc3LjE5ODE3NyA2Mi45MjE4MjcsNzcuNDE5ODM0IDYyLjc5Njc1OSw3Ny42ODI0MDcgNjIuODg1MjUxLDc3LjE2NDMyNiA2My4wMTc1OTMsNzYuNDk3OTQ2IDYzLjAxNzU5Myw3Ni40OTc5NDYgWiIgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ1ODMzMiIgaWQ9InBhdGg0MDE4Ii8+CiAgICAgIDxwYXRoIGQ9Ik0gNzMuMTEzODUzLDU3LjU2ODI1NSBDIDcxLjk3NTYxNSw1Ny42MDAxNDggNzAuMDk2MjgsNTguMjA2NTYyIDY5Ljc5ODg4OCw1OC40NDYwMSA2OS43MzUxMjMsNTguNDk3MzIzIDY5LjcwODM2MSw1OC41NjI5ODggNjkuNjk5Nzc1LDU4LjYzMzEzMiA2OS42Njc0MDYsNTguNzEyMjE1IDY5LjYxOTQ2Niw1OC43OTg5OCA2OS42MTk0NjYsNTguNzk4OTggNjkuNjE5NDY2LDU4Ljc5ODk4IDY5LjY3MjYwOCw1OC41MjE4ODIgNjkuNjk5MzE3LDU4LjQ2MjE5MiA2OS43MjYwMDYsNTguNDAyNTA3IDY5LjY2NTg3MSw1OC4zNjMwNjkgNjkuNjI1NDg1LDU4LjQwNjM5MSA2OS41ODUwMjUsNTguNDQ5NjM4IDY5LjQ5NjE1Nyw1OC43NTYyNzcgNjkuNDk2MTU3LDU4Ljc1NjI3NyA2OS40OTYxNTcsNTguNzU2Mjc3IDY5LjQ1NDA1NCw1OC41NTE4MDkgNjkuNDQ5NDYxLDU4LjQ4NzYxOSA2OS40NDQ5ODksNTguNDIzNDQ0IDY5LjQ1NjMxMyw1OC4zNzMyODQgNjkuMzk0NDM1LDU4LjQxMDU1MSA2OS4zMzI1NDcsNTguNDQ3Nzk5IDY5LjQwODkzNSw1OC43MjkzNzQgNjkuNDA5NzAyLDU4LjgyMTkyNSA2OS40MTAyMzEsNTguODU5MzU4IDY5LjQ0ODU5LDU4Ljk3MTQyNSA2OS40OTcwOTEsNTkuMDk4MTUgNjkuNDk4MTQ5LDU5LjEwMTg1NCA2OS40OTY4MjYsNTkuMTE0NDQ4IDY5LjQ5ODQxNCw1OS4xMTgyMDUgNjkuNTA1ODQ5LDU5LjE2NTI2NCA2OS40OTczNTYsNTkuMTk1MzIxIDY5LjQ2MzI2Nyw1OS4yMDA4MjIgNjkuNDYzMjY3LDU5LjIwMDgyMiA2OS40NTIzOTIsNTkuMjYzMzkzIDY5LjMzOTk2LDU5LjE1ODEyNiA2OS4yODU0MTksNTkuMTA3MDU2IDY5LjMyMTQ2Niw1OC44NTc1NTkgNjkuMzIxNDY2LDU4Ljg1NzU1OSA2OS4zMDQwNTYsNTguODI4NTY5IDY5LjI5NzIwNCw1OC43ODYwNzQgNjkuMjQxMzE2LDU4Ljg2MjQ4IEwgNjkuMjA2NjI5LDU5LjExNjAzMyBDIDY5LjIwNjYyOSw1OS4xMTYwMzMgNjkuMTU2NDQ4LDU5LjA2Mjc1MSA2OS4xNDg1MjQsNTguOTg4ODY5IDY5LjEzNzIyNiw1OC44ODQ2NzYgNjkuMTgxNzc2LDU4LjczNDgzNyA2OS4xMTU1MzUsNTguNzc5NzA1IDY5LjAzMTQ2Nyw1OC44MzY2NDYgNjkuMTI0MjE0LDU5LjA5NDc3MSA2OS4xMjc3MDYsNTkuMTQwOTk0IDY5LjEzMTMzMSw1OS4xODcyMTcgNjguOTYzMTc1LDU5LjAzNjkxMiA2OC45NDU2NzMsNTguOTYxMTE3IDY4LjkyODE1Nyw1OC44ODUzMTYgNjguODgzNDQsNTguOTE3NTI3IDY4Ljg5ODY2Miw1OS4wMTQyOTMgNjguOTEzOTI4LDU5LjExMTA1NiA2OS4zNTg1ODcsNTkuNDQ5NDggNjkuNTMyNDcxLDU5LjUwODMyMyA2OS42MDI0MTQsNTkuNTMxOTc3IDY5LjYwNDQ1Niw1OS43NzQ2MjYgNjkuNTc0NTMyLDYwLjAyODY3OSA2OS41NjIwMTcsNjAuMDMwNTMxIDY5LjU1NDIzOCw2MC4wNDA2MzggNjkuNTQ1MDkyLDYwLjA0MDUzMiA2OS4zNjYxNDksNjAuMDM3NTY5IDY5LjM4MzQwNSw2MC4xOTEyNzMgNjkuMzgzNDA1LDYwLjE5MTI3MyA2OS4xMzY2NDEsNjAuNTUxMjY1IDY4LjkwNjE3Niw2MC45MjIyNjQgNjguNDMxMjc1LDYxLjIyNTM3MSBMIDY4LjIwMTkxNiw2MS40MjA1MDYgQyA2OC4xNTc4MTgsNjEuMzY4NjU5IDY4LjE0NDc3Nyw2MS40MDE0ODMgNjcuOTIyNjIyLDYxLjQ1NzgwNyBMIDY3Ljg2NTc0Nyw2MS4zNTA2ODMgQyA2Ny44NjU3NDcsNjEuMzUwNjgzIDY4LjA2MDEwNyw2MS4yNzk0OTcgNjguMTkxNzQsNjAuOTI4MzU1IDY4LjIwNzk4NSw2MC44ODQ5OSA2OC4wMjIxMDUsNjAuNjQ2MjMgNjcuODk1ODA0LDYwLjY5NTE0MyA2Ny44NzM1MjYsNjAuNjEyNzQ0IDY3Ljg1MTU3Niw2MC42MTAzNjMgNjcuODA5NDg2LDYwLjU5OTg4MyA2Ny43NDI1OTcsNjAuNTgzMjE0IDY3LjcxMTc2NSw2MC42NDYxMjQgNjcuNzExNzY1LDYwLjY0NjEyNCA2Ny43MTE3NjUsNjAuNjQ2MTI0IDY3LjY3MzgsNjAuNjAyMTMyIDY3LjcyNDQxMiw2MC41MjQ2NjQgNjcuNzQ5NzA2LDYwLjQ4NTkzNyA2Ny40NzgwNTUsNjAuNDk5OTUyIDY3LjM4MTkwOCw2MC41MTU1NjMgNjcuMjg1NzgsNjAuNTMxMTQ3IDY3LjM0MzkzMyw2MC40MjE5NTYgNjcuMDEwNzUxLDYwLjM2NzQzMyA2Ni45MTM0MTMsNjAuMzUxNTMxIDY2Ljc3MTUzLDYwLjQwMjI3MSA2Ni43NzE1Myw2MC40MDIyNzEgNjYuNzcxNTI4LDYwLjQwMjI3MSA2Ni41ODIyMjYsNjAuNDA5OTE3IDY2LjQ5MjIzNiw2MC40Mzk1NzIgNjYuMDQ5MTkyLDYwLjY3MzkyNCA2NS45NDE5MDMsNjEuMDI2NjAzIDY2LjAyMzY1OSw2MS4zMjMyMjcgNjYuMTU5NjYsNjEuODE3NjggNjYuODIxMTQsNjIuMTcwMTU4IDY3LjI4ODgxNyw2MS42MTc0OTcgNjcuMzczMzk0LDYxLjY1NDYyIDY3LjY4MzU1LDYxLjk4NTQyNiA2Ny42ODM1NSw2MS45ODU0MjYgNjcuNjgzNTUsNjEuOTg1NDI2IDY3Ljc5OTM1Miw2Mi4xNzY5OTUgNjcuODkwNTUyLDYyLjI0NDIyMyA2Ny45MTczMiw2Mi4yNjM5MzUgNjcuOTUzMzMyLDYyLjI3OTEwNiA2Ny45ODQ0MjMsNjIuMjk4Nzg4IDY3LjgzNjA0NSw2Mi4zNzE4ODcgNjcuNzMwNDU1LDYyLjQzNzM5IDY3LjY0NDg1Nyw2Mi41MDA3MDIgNjcuNTkzMTgzLDYyLjQ4OTQ1NyA2Ny40ODYwNDYsNjIuNDY4NDIgNjcuNDYxNDM0LDYyLjQ2MTcwMyA2Ny4zMzc3MSw2Mi40Mjc5MzcgNjcuMDg3ODk1LDYyLjczNjQyIDY3LjAxMDc0Myw2Mi45ODIyMTcgTCA2Ny4wMzY2NDYsNjIuNzQ5MzE1IEMgNjcuMDM2NjQ2LDYyLjc0OTMxNSA2Ni44NDkxMTcsNjIuOTU4NzQ0IDY2LjgyNjU1MSw2My4wOTQxMiA2Ni43NzM4OTgsNjMuNDEwMTkyIDY2Ljk4OTkyMyw2My43MjQ1NjkgNjYuOTM1MjA0LDY0LjA0MjgzNyA2Ni44NzQzODUsNjQuMzk2NTMyIDY2LjQ2MzM3Myw2NS4wMzczMjYgNjYuNDYzMzczLDY1LjAzNzMyNiBMIDY1LjY3NTU3Niw2NS4xNDYxMzMgNjUuMzYzMTU2LDY1LjEzNTE4IEMgNjUuNDcwOTI5LDY1LjAzMzk3NyA2NS41ODMwOCw2NC45MzcyMDggNjUuNjcyMjE2LDY0Ljc2NDE4MSA2NS43Mzk4NDEsNjQuNjMyOTA1IDY1LjQyMDIwOCw2NC40Mjc2ODQgNjUuNDIwMjA4LDY0LjQyNzY4NCA2NS40MjAyMDgsNjQuNDI3Njg0IDY1LjQ0OTIwMSw2NC4yNzE4MjggNjUuMzUwODUsNjQuMjgxMDk5IEwgNjUuMDkwOTc0LDY0LjMwNzEzNCBDIDY0Ljk2OTUwNCw2NC4yNTk4NjEgNjQuOTExNjI5LDY0LjE1MDY0OSA2NC43MTEwMzIsNjQuMTc5NjU4IDY0LjcxMTAzMiw2NC4xNzk2NTggNjQuNjIyMTU5LDY0LjA3NDA4NyA2NC41NjAyODgsNjQuMDE3OTY2IDY0LjQ5ODQxMyw2My45NjE4NSA2My45MjI2MTYsNjQuMjc4NDQ4IDYzLjkyMjYxNiw2NC4yNzg0NDggTCA2NC4zMDk2NDksNjQuMTk0Mjk1IEMgNjQuMzA5NjQ5LDY0LjE5NDI5NSA2My45NDQ4OTQsNjQuNDc3Mzk5IDYzLjgyNjQxNCw2NC42NzY1NzcgNjMuNDkwMDIyLDY1LjI0MjE3NyA2My41NTg3MzUsNjYuMDIwMjExIDYzLjQxODI0MSw2Ni41NDIwNzUgNjMuNTY1NjU2LDY2LjM4MDk2IDYzLjY1NTE1NCw2Ni4zMDYyNTIgNjMuNjU1MTU0LDY2LjMwNjI1MiA2My4zNjYyODIsNjYuNzg5ODU3IDYzLjQwNzgwNiw2Ny4xMDEzNTEgNjMuMzE1MjcsNjcuNDgzNzAxIDYzLjMxNTI3LDY3LjQ4MzcwMSA2My41NjI2ODgsNjYuOTA0MjM3IDYzLjYwNzA1Myw2Ni44MzIxNjQgNjMuNzM0NjI0LDY2LjYyNDk2NCA2NC4wODA4NjksNjYuMzYwNTE4IDY0LjA4MDg2OSw2Ni4zNjA1MTggNjQuMTExMjQ4LDY2LjQ2MzUxMiA2My45ODQyNDgsNjYuNzEwMTEyIDYzLjg4NDMzNiw2Ni45MjU3MjEgNjMuODg0MzM2LDY2LjkyNTcyMSA2NC4xNzYzMyw2Ni41OTExMDIgNjQuMjc2MTU4LDY2LjQyODkzOSA2NC4zNzU5OSw2Ni4yNjY3ODEgNjQuNjQzNDI2LDY1Ljc1MjI5NCA2NC43NjUzOTksNjUuNTU0MDY4IDY0Ljg0MTA1MSw2NS40MzExMjQgNjUuMDQzMDUzLDY1LjQ4Mjk0MyA2NS4xMDcyNjcsNjUuNTUzMjc0IDY1LjAyNzkwOCw2NS41OTM4NDggNjQuOTc1NjMxLDY1LjcwMjE2NiA2NC45NzU2MzEsNjUuNzAyMTY2IEwgNjUuMTY5MDc0LDY1Ljc0MDU0OSBDIDY1LjQ2NjQ5Miw2NS45NzM5OTYgNjUuNzQ0NzU0LDY2LjAxNTY2MyA2Ni4wMjgzODcsNjYuMTQwMjI5IEwgNjYuMTg0ODM1LDY2LjIzMTE3MSBDIDY1Ljg5MDY3Miw2Ni4yMjg3OSA2NS42MzAwNTcsNjYuMjQyMzM3IDY1LjUyNDgzMiw2Ni4yOTE4OTYgNjUuMzU4MDE4LDY2LjM3MDQyNyA2NS4yNDAzNTIsNjYuNDQ4MDk4IDY1LjE0NjQyNSw2Ni41MTYzMTUgNjQuOTcyOTk0LDY2LjQ4OTEwNSA2NC44NTA5MzksNjYuNDU0MDM4IDY0Ljg1MDkzOSw2Ni40NTQwMzggTCA2NC40MjIyNjEsNjcuNDk2MTUyIEMgNjQuMjgyNjE2LDY3LjgzMzQxNiA2Ni45OTYxNTQsNjguNzY4NjY2IDY4LjE3MTQwNyw2OS4wOTU4MjMgNjguMzcyODYzLDY5LjE1MTkxNSA2OC42NTgxODcsNjguOTk5OTkzIDY4Ljc1ODk2Nyw2OC44Mzg0MjYgNjguNzYxMzQ4LDY4LjgzNDYxNiA2OC44ODAyNjMsNjguNjUxMDQ1IDY4Ljg4NzUyMyw2OC42Mzk0MzUgNjguOTI3MTY4LDY4LjY3NTEzMyA2OC45NzM5NTcsNjguNzA1MTQ0IDY5LjAyMzkzMSw2OC43MzE2MTMgNjkuMzY1NDAzLDY4LjkxMjQ4IDY5LjgxMTk5Myw2OC43ODYwMzUgNzAuMDIyMjg0LDY4LjQ0ODkzMiA3MC4yMzI1NjksNjguMTExODUzIDcwLjEyNTQ3OSw2Ny42OTkxMyA2OS43ODQwMDUsNjcuNTE4MjYxIDY5LjczMjA1NCw2Ny40OTA3NDQgNjkuNjc1MDIzLDY3LjQ3MTYxNSA2OS42MTkzODksNjcuNDU3OTkxIDY5LjY2OTM2MSw2Ny4zNzgxMjEgNjkuNzYyOTE1LDY3LjIzNzIxNSA2OS44MjEzMDksNjcuMTQzODc4IDY5Ljg2NDM2Nyw2Ny4xODUwODkgNjkuOTEyODQ0LDY3LjIyNTc0NSA2OS45Njg5NjcsNjcuMjU1NDc0IDcwLjMxMDQzOSw2Ny40MzYzNDYgNzAuNzU3MDI5LDY3LjMwOTkwMSA3MC45NjczMiw2Ni45NzI3OTMgNzEuMTc3NjA1LDY2LjYzNTY4NyA3MS4wNjk4OTYsNjYuMjEyOTYyIDcwLjcyODQyMiw2Ni4wMzIwOTMgNzAuNjcyNTQ3LDY2LjAwMjQ5NyA3MC42MTM4MjYsNjUuOTg1OTkgNzAuNTUzNzg3LDY1Ljk3MjQzOCA3MS41MjQ5MTMsNjQuNDE3OTU4IDcyLjMzMzE2Miw2My4xMzc0MjcgNzMuMzI3NDE0LDYxLjUyNzcwMiA3My4zNzkzNTksNjEuNTg4NTAxIDczLjQ0MTgyMiw2MS42NDY0NTggNzMuNTE4MjI5LDYxLjY4NjkyOSA3My44NTk3LDYxLjg2Nzc5MiA3NC4zMDYyOSw2MS43NDEzNDggNzQuNTE2NTgxLDYxLjQwNDI0OCA3NC43MjY4NjksNjEuMDY3MTQyIDc0LjYxOTE2LDYwLjY0NDQxNyA3NC4yNzc2ODMsNjAuNDYzNTQ4IDc0LjE5NTMxNiw2MC40MTk5MjQgNzQuMTEwOTIyLDYwLjM4Nzk3NSA3NC4wMjEwNDgsNjAuMzc4NzcgNzQuMDcxMDUyLDYwLjI5NzA2MiA3NC4xMjE5OTQsNjAuMjIzNjEzIDc0LjE2Nzc4OSw2MC4xNDg0OTMgNzQuMjE2Nzk3LDYwLjIwMTYyMSA3NC4yNzgwMyw2MC4yNDE4ODggNzQuMzQ2NzM5LDYwLjI3ODI3NiA3NC42ODgyMTEsNjAuNDU5MTQ4IDc1LjEzNDgwMSw2MC4zMzI3MDQgNzUuMzQ1MDkyLDU5Ljk5NTU5NSA3NS41NTUzNzUsNTkuNjU4NDkgNzUuNDQ4Mjg1LDU5LjI0NTc5MyA3NS4xMDY4MTEsNTkuMDY0OTI0IDc1LjAxODQwNSw1OS4wMTgxIDc0LjkxNjc1NSw1OC45ODkyODIgNzQuODIwMTA4LDU4Ljk4MTk5MyA3NC44OTY1MDQsNTguNDMyMzc0IDczLjk0NDMxMSw1Ny42NjA1NTggNzMuNTQ3ODg2LDU3LjU5MTk3OCA3My40MjIzMjUsNTcuNTcwMjU1IDczLjI3NjYwOCw1Ny41NjM4MzQgNzMuMTEzOTk1LDU3LjU2ODQwMyBaIE0gNjkuNzIxMzY1LDU4LjgyMjg4MyBDIDY5LjgwNzM2Myw1OS4wOTgwNzYgNzAuMDg4NjYsNTkuNDA5MDk0IDcwLjIxOTA0Niw1OS41NTY1NzIgNzAuMzMzNTYzLDU5LjY4NjA4OSA3MC44MTM1MTIsNTkuOTY4MjM4IDcxLjI4NTk3OSw2MC4yMjUwNjkgNzEuMjY3MDM0LDYwLjIyNjEyNyA3MS4xNTA3ODcsNjAuMjMzNjQxIDcxLjE0NTcxMiw2MC4yMzM2OTQgNzEuMDU5OTc3LDYwLjIzMjYzNiA3MC44OTAxNDEsNjAuNDQ4NjcxIDcwLjg2OTMyOSw2MC40ODIwMDMgNzAuODQ4NTMyLDYwLjUxNTM0IDcwLjM0Nzg2MSw2MS42NTA1MDkgNzAuMzQ3ODYxLDYxLjY1MDUwOSBMIDcwLjI0NzY3NCw2MS42NTY2NzMgNzAuMTM2MjMyLDYxLjY0MzQxOCA2OS4yNTI4OTQsNjEuNTA2Njg0IDY5Ljc5MDM2OCw2MC41OTg2ODcgNjkuOTU4MzgxLDYwLjM4NzIxMSBDIDY5Ljk1ODM4MSw2MC4zODcyMTEgNzAuMDEwMDA3LDYwLjA3NDAyMyA2OS44NzA5OSw2MC4xMTEwMTIgNjkuODU0NjM4LDYwLjExNTMyNSA2OS44NDQ5MjgsNjAuMDg2NTM4IDY5LjgyNzIxNyw2MC4wNTMzNjIgNjkuODY0MjExLDU5LjgzNDMxMSA2OS44NDI5MzMsNTkuNjEyMDkgNjkuNzc3NzU4LDU5LjQxMjc3OSA2OS44Mzk2NzYsNTkuMzc1NTMxIDY5LjgyODI2Miw1OS4xODE3MzcgNjkuNzc5MzQ2LDU5LjExMDk2OSA2OS43MDU2ODMsNTkuMDA0NDQgNjkuNzEwNzA1LDU4Ljg5NjA1OSA2OS43MjEzOTcsNTguODIyODkxIFogTSA3MS4zOTU3MDEsNjAuNzAxMDU0IEMgNzEuMzk1NzAxLDYwLjcwMTA1NCA3MS43OTY0MzksNjAuNjgyNzE4IDcyLjE2ODk5OSw2MC42ODM2NDQgNzIuMjk2MzE5LDYwLjc3OTQxNiA3Mi4zMDgyMTIsNjAuOTM2MDY4IDcyLjIyNjE3OCw2MS4xMjI2MTUgNzIuMDc0OTA4LDYxLjAyOTkxIDcxLjkwMTkwNSw2MC45NTUxMDcgNzEuNzY0MjQyLDYwLjk3MDAxMSA3MS41NDE3NjIsNjAuOTk0MDg4IDcxLjM3MTI4Myw2MS4xNTk2MTQgNzEuMjI1MzY1LDYxLjM2NTIxOSA3MS4zMTM3NzgsNjEuMDExMTU0IDcxLjM5NTY5OSw2MC43MDEwNjIgNzEuMzk1Njk5LDYwLjcwMTA2MiBaIE0gNjcuMTA5MTg2LDYzLjI3NzgzMSA2OC41NTgwNDUsNjMuOTQyOTQxIEMgNjguNDA4NTc3LDY0LjAxMjkxNSA2OC4xMjUyNjYsNjQuMTU4MDM5IDY4LjAxMzYzOCw2NC4yNDc5NzkgNjcuODcwMTcxLDY0LjM2MzU0MSA2Ny43ODQyNjMsNjUuNzUwNDk1IDY3Ljc4NDI2Myw2NS43NTA0OTUgTCA2Ni45NjgxMjksNjUuMzk4NDQgNjcuMjU2MDc1LDY0Ljg0NzcxIDY3LjA2NTI1OCw2NC42ODg0ODYgNjcuMTk0MTIzLDY0LjE2NzY1NCA2Ny4wNTI2MzcsNjMuNTAyNTQ0IDY3LjEwOTIwNSw2My4yNzc4MTUgWiBNIDY4Ljc0Mzk0MSw2NC4wMjIwMjUgNjkuMTU4MjUyLDY0LjIxNzc4NSA2OC44NDA3MjYsNjQuMjg3NjAzIDY4Ljc0MzkzMyw2NC4wMjIwMTQgWiBNIDY5Ljc1MzM4LDY0LjU3MzM5IEMgNjkuNzYyMzc2LDY0LjY4OTUyMyA2OS42NTE2MDgsNjQuODQ5OTA2IDY5LjQ3OTkzMyw2NS4wMzI3MDcgNjkuNDAyNTA4LDY1LjAwNDk4OSA2OS4zMjQzNjMsNjQuOTg4ODE3IDY5LjI1NjQzNyw2NC45OTYxNyA2OS4xOTUyMzgsNjUuMDAyODExIDY5LjE0MzEsNjUuMDIxODYxIDY5LjA4ODU4LDY1LjA0NjcyNyBMIDY5LjExNTU1Nyw2NC45OTQ3ODEgNjguOTQzMDg1LDY0LjY0MzM2MiA2OS43NTMzNzIsNjQuNTczMzkgWiIgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ1ODMzMiIgaWQ9InBhdGg0MDMyIi8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4=", 2986 | "created": 1712911276822, 2987 | "lastRetrieved": 1712911276822 2988 | } 2989 | } 2990 | } -------------------------------------------------------------------------------- /doc/diagram/pss-tor-safe-browsing/PSS-tor-safe-browsing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/doc/diagram/pss-tor-safe-browsing/PSS-tor-safe-browsing.png -------------------------------------------------------------------------------- /private_search_set/README.md: -------------------------------------------------------------------------------- 1 | # Private Search Set python library 2 | This library implements the Private Search Set (PSS) concept to facilitate experimentation and hopefully enhance privacy in data sharing. It's aimed at providing a practical approach to manage and check data against privacy-preserving sets. 3 | 4 | # Installation 5 | To install the library, clone the repository and install it in editable mode: 6 | ```sh 7 | git clone https://github.com/hashlookup/private-search-set.git 8 | cd private-search-set 9 | pip install -e . 10 | ``` 11 | 12 | # Use 13 | Run the private-search-set CLI with the following options: 14 | ```sh 15 | Usage: private-search-set [OPTIONS] 16 | 17 | Options: 18 | --pss-home PATH PSS working folder. [required] 19 | --json-file PATH Path to the PSS JSON file. 20 | --ingest / --check ingest or check stdin into/against PSS files[required] 21 | --bf force check against the bloom filter over the hashset 22 | --key TEXT specify key content for HMAC operations 23 | --debug / --no-debug print debug information 24 | --help Show this message and exit. 25 | 26 | ``` 27 | 28 | ## Ingesting Data 29 | To create and populate a PSS in a directory (e.g., output), use: 30 | ```sh 31 | cat tests/word_list.txt | private-search-set --pss-home=output --ingest --json-file=pss.json 32 | ``` 33 | (here we use the json metadata sample as `pss.json`) 34 | 35 | ## Checking Data 36 | To check data against the hashset with `--check`: 37 | ```sh 38 | cat tests/word_list.txt | private-search-set --pss-home=output --check 39 | ``` 40 | Force the use of the Bloom filter with `--check --bf`: 41 | 42 | ```sh 43 | cat tests/word_list.txt | private-search-set --pss-home=output --check --bf 44 | ``` 45 | In both case, each line printed to `stdout` is a match. -------------------------------------------------------------------------------- /private_search_set/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/private_search_set/__init__.py -------------------------------------------------------------------------------- /private_search_set/bloom_filter_base.py: -------------------------------------------------------------------------------- 1 | from abc import ABC, abstractmethod 2 | 3 | class BloomFilterBase(ABC): 4 | @abstractmethod 5 | def __init__(self, parameters): 6 | """Initialize the Bloom filter with given parameters.""" 7 | loaded = False 8 | pass 9 | 10 | @abstractmethod 11 | def add(self, data): 12 | """Add data to the Bloom filter.""" 13 | pass 14 | 15 | @abstractmethod 16 | def check(self, data): 17 | """Load a Bloom filter from file.""" 18 | pass 19 | 20 | @abstractmethod 21 | def load(self, data): 22 | """Load a Bloom filter from file.""" 23 | pass 24 | 25 | @abstractmethod 26 | def write(self): 27 | """Write the serialized bloom filter to a file descriptor.""" 28 | pass 29 | -------------------------------------------------------------------------------- /private_search_set/bloom_filter_dcso.py: -------------------------------------------------------------------------------- 1 | from flor import BloomFilter 2 | from private_search_set.bloom_filter_base import BloomFilterBase 3 | 4 | class BloomFilterDCSO(BloomFilterBase): 5 | def __init__(self, parameters): 6 | super().__init__(parameters) 7 | self.bf = BloomFilter(n=parameters['capacity'], p=parameters['fp-probability']) 8 | 9 | def add(self, data): 10 | self.bf.add(data) 11 | pass 12 | 13 | def check(self, data): 14 | return data in self.bf 15 | 16 | def load(self, fd): 17 | self.bf.read(fd) 18 | if self.bf.N == 0: 19 | self.loaded = False 20 | else: 21 | self.loaded = True 22 | pass 23 | 24 | def write(self, fd): 25 | self.bf.write(fd) 26 | pass -------------------------------------------------------------------------------- /private_search_set/cli.py: -------------------------------------------------------------------------------- 1 | import click 2 | 3 | import pdb 4 | from private_search_set.main import PrivateSearchSet 5 | 6 | @click.pass_context 7 | def ingest_stdin(ctx): 8 | pss = ctx.obj 9 | click.echo("Ingesting stdin to PSS file.") 10 | pss.ingest_stdin(ctx.params["debug"]) 11 | pss.write_to_files(ctx.params["pss_home"]) 12 | 13 | @click.pass_context 14 | def check_stdin(ctx): 15 | pss = ctx.obj 16 | pss.check_stdin(ctx.params["bf"], ctx.params["debug"]) 17 | 18 | @click.command() 19 | @click.option('--pss-home', required=True, type=click.Path(exists=False) , help='PSS working folder.') 20 | @click.option('--json-file', required=False, type=click.Path(exists=True), help='Path to the PSS JSON file.') 21 | @click.option('--ingest/--check', required=True, type=click.BOOL , help='ingest or check stdin into/against PSS files') 22 | @click.option('--bf', required=False, is_flag=True, default=False, help='force check against the bloom filter over the hashset') 23 | @click.option('--key', required=False, type=click.STRING , help='specify key content for HMAC operations') 24 | @click.option('--debug/--no-debug', default=False, help='print debug information') 25 | @click.pass_context 26 | def cli(ctx, json_file, pss_home, ingest, key, bf, debug): 27 | # If a json-file with PSS metadata is provided, load the PSS from the JSON file 28 | # set the key if provided 29 | if json_file: 30 | try: 31 | ctx.obj = PrivateSearchSet.load_from_json_specs(json_file, key, debug) 32 | except ValueError as e: 33 | click.echo(e) 34 | exit(1) 35 | # If pss_home is provided, load the PSS from the files in the folder 36 | # set the key if provided 37 | elif pss_home: 38 | try: 39 | ctx.obj = PrivateSearchSet.load_from_pss_home(pss_home, key, debug) 40 | except ValueError as e: 41 | click.echo(e) 42 | exit(1) 43 | if ingest: 44 | try: 45 | ingest_stdin() 46 | except ValueError as e: 47 | click.echo(e) 48 | exit(1) 49 | else: 50 | try: 51 | check_stdin() 52 | except ValueError as e: 53 | click.echo(e) 54 | exit(1) 55 | pass 56 | 57 | def main(): 58 | cli(obj={}) -------------------------------------------------------------------------------- /private_search_set/main.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | import sys 4 | import hashlib 5 | from private_search_set.bloom_filter_dcso import BloomFilterDCSO 6 | 7 | class PrivateSearchSet: 8 | def __init__(self, algorithm, bloomfilter, canonicalization_format, description, generated_timestamp, keyid, misp_attribute_types, version): 9 | self.algorithm = algorithm 10 | self.bloomfilter = bloomfilter 11 | self.canonicalization_format = canonicalization_format 12 | self.description = description 13 | self.generated_timestamp = generated_timestamp 14 | self.keyid = keyid 15 | self.misp_attribute_types = misp_attribute_types 16 | self.version = version 17 | 18 | def print_private_search_set(private_search_set): 19 | print("Algorithm:", private_search_set.algorithm) 20 | print("Bloomfilter:", private_search_set.bloomfilter) 21 | print("Canonicalization Format:", private_search_set.canonicalization_format) 22 | print("Description:", private_search_set.description) 23 | print("Generated Timestamp:", private_search_set.generated_timestamp) 24 | print("Key ID:", private_search_set.keyid) 25 | print("MISP Attribute Types:", private_search_set.misp_attribute_types) 26 | print("Version:", private_search_set.version) 27 | print("Key:", private_search_set._key) 28 | 29 | def load_from_json_specs(json_file, key, debug): 30 | with open(json_file) as file: 31 | json_data = json.load(file) 32 | data = {k.replace('-', '_'): v for k, v in json_data.items()} 33 | pss = PrivateSearchSet(**data) # Create an instance of the PrivateSearchSet class 34 | if set(data.keys()) == set(pss.__dict__.keys()): 35 | pss.init_filter_and_set() 36 | pss.init_key(key) 37 | if debug: 38 | PrivateSearchSet.print_private_search_set(pss) 39 | return pss 40 | else: 41 | raise ValueError("JSON file does not match the expected format.") 42 | 43 | def load_from_pss_home(pss_home, key, debug): 44 | if os.path.exists(pss_home): 45 | file_path = os.path.join(pss_home, 'private-search-set.json') 46 | if os.path.exists(file_path): 47 | pss = PrivateSearchSet.load_from_json_specs(file_path, key, debug) 48 | else: 49 | raise ValueError("No JSON file found in the PSS home.") 50 | else: 51 | raise ValueError("PSS home does not exist.") 52 | file_path = os.path.join(pss_home, 'private-search-set.bloom') 53 | pss.load_bf_from_file(file_path) 54 | file_path = os.path.join(pss_home, 'private-search-set.pss') 55 | pss._ps = pss.load_pss_from_file(file_path) 56 | return pss 57 | 58 | def load_bf_from_file(self, file_path): 59 | if os.path.exists(file_path): 60 | with open(file_path, 'rb') as f: 61 | self._bf.load(f) 62 | 63 | def load_pss_from_file(self, file_path): 64 | if os.path.exists(file_path): 65 | with open(file_path, 'r') as f: 66 | return set(f.read().splitlines()) 67 | else: 68 | return None 69 | 70 | def init_filter_and_set(self): 71 | # init bloom filter 72 | if self.bloomfilter['format'] == 'dcso-v1': 73 | self._bf = BloomFilterDCSO(self.bloomfilter) 74 | else: 75 | raise ValueError("Bloomfilter format not supported.") 76 | 77 | # init the private search set 78 | self._ps = set() 79 | 80 | def init_key(self, key): 81 | if key != None: 82 | self.set_key(key) 83 | else: 84 | self.set_key_from_keyid() 85 | 86 | def set_key(self, key): 87 | self._key = key 88 | 89 | def set_key_from_keyid(self): 90 | # TODO Use the keyid to get the key from the key store 91 | self._key = 'infected' 92 | 93 | def ingest_stdin(self, debug): 94 | # Read bytes from stdin 95 | for line in sys.stdin.buffer.read().splitlines(): 96 | self.ingest(line, debug) 97 | 98 | def ingest(self, data, debug): 99 | # HMAC the data 100 | hashed = b'' 101 | if self.algorithm == 'Blake2': 102 | # TODO Use a salt 103 | hashed_string = hashlib.blake2b(data, key=self._key.encode()).hexdigest() 104 | hashed_bytes = hashed_string.encode() 105 | else: 106 | raise ValueError("HMAC algorithm not supported.") 107 | 108 | # add the string digest to the private search set 109 | if debug: 110 | print(f"Ingesting in private search set: {hashed_string}") 111 | self._ps.add(hashed_string) 112 | # add the utf8 encoded bytes representation of the hexdigest to the bloom filter 113 | if self.bloomfilter['format'] == 'dcso-v1': 114 | if debug: 115 | print(f"Ingesting in bloom filter: {hashed_bytes}") 116 | self._bf.add(hashed_bytes) 117 | 118 | def check_stdin(self, bf, debug): 119 | # Read bytes from stdin 120 | for line in sys.stdin.buffer.read().splitlines(): 121 | # check hashset in priority 122 | if self._ps != None and bf == False: 123 | if debug: 124 | print(f"Checking against private search set: {line}") 125 | if self.check_pss(line): 126 | print(line) 127 | elif self._bf.loaded: 128 | if debug: 129 | print(f"Checking against bloom filter: {line}") 130 | if self.check_bf(line): 131 | print(line) 132 | else: 133 | raise ValueError("No private search set or bloom filter loaded.") 134 | 135 | def check_pss(self, data): 136 | # HMAC the data 137 | hashed = b'' 138 | if self.algorithm == 'Blake2': 139 | # TODO Use a salt 140 | hashed_string = hashlib.blake2b(data, key=self._key.encode()).hexdigest() 141 | else: 142 | raise ValueError("HMAC algorithm not supported.") 143 | if hashed_string in self._ps: 144 | return True 145 | else: 146 | return False 147 | 148 | def check_bf(self, data): 149 | # HMAC the data 150 | hashed_bytes = b'' 151 | if self.algorithm == 'Blake2': 152 | # TODO Use a salt 153 | hashed_bytes = hashlib.blake2b(data, key=self._key.encode()).hexdigest().encode() 154 | else: 155 | raise ValueError("HMAC algorithm not supported.") 156 | 157 | if self.bloomfilter['format'] == 'dcso-v1': 158 | return self._bf.check(hashed_bytes) 159 | else: 160 | raise ValueError("Bloomfilter format not supported.") 161 | 162 | 163 | def write_to_files(self, pss_home): 164 | if not os.path.exists(pss_home): 165 | os.makedirs(pss_home) 166 | # Write the bloom filter 167 | file_path = os.path.join(pss_home, 'private-search-set.bloom') 168 | with open(file_path, 'wb') as f: 169 | self._bf.write(f) 170 | # Write the JSON file 171 | file_path = os.path.join(pss_home, 'private-search-set.json') 172 | with open(file_path, 'w') as f: 173 | export = {k: v for k, v in self.__dict__.items() if k.startswith('_') != True} 174 | f.write(json.dumps(export)) 175 | # Write the private search file 176 | file_path = os.path.join(pss_home, 'private-search-set.pss') 177 | with open(file_path, 'w') as f: 178 | for ps in self._ps: 179 | f.write(f"{ps}\n") -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | 3 | setup( 4 | name="private_search_set", 5 | version="0.1", 6 | packages=find_packages(), 7 | install_requires=[ 8 | "flor", 9 | "click", 10 | "hashlib", 11 | ], 12 | entry_points=''' 13 | [console_scripts] 14 | private-search-set=private_search_set.cli:main 15 | ''', 16 | ) -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/tests/__init__.py -------------------------------------------------------------------------------- /tests/test_main.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/tests/test_main.py -------------------------------------------------------------------------------- /tests/word_list.txt: -------------------------------------------------------------------------------- 1 | zygote 2 | zygotene 3 | zygotic 4 | zygotoblast 5 | zygotoid 6 | zygotomere 7 | zygous 8 | zygozoospore 9 | zymase 10 | zyme 11 | zymic 12 | zymin 13 | zymite 14 | zymogen 15 | zymogene 16 | zymogenesis 17 | zymogenic 18 | zymogenous 19 | zymoid 20 | zymologic 21 | zymological 22 | zymologist 23 | zymology 24 | zymolyis 25 | zymolysis 26 | zymolytic 27 | zymome 28 | zymometer 29 | zymomin 30 | zymophore 31 | zymophoric 32 | zymophosphate 33 | zymophyte 34 | zymoplastic 35 | zymoscope 36 | zymosimeter 37 | zymosis 38 | zymosterol 39 | zymosthenic 40 | zymotechnic 41 | zymotechnical 42 | zymotechnics 43 | zymotechny 44 | zymotic 45 | zymotically 46 | zymotize 47 | zymotoxic 48 | zymurgy 49 | zyrenian 50 | zyrian 51 | zyryan 52 | zythem 53 | zythia 54 | zythum 55 | zyzomys 56 | zyzzogeton 57 | --------------------------------------------------------------------------------