{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,8 +1,8 @@\n-Zip file size: 15619 bytes, number of entries: 24\n+Zip file size: 15658 bytes, number of entries: 24\n -rw-r--r--  2.0 unx       64 b- defN 20-Apr-01 08:04 META-INF/MANIFEST.MF\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/registry/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/registry/multiple/\n@@ -10,17 +10,17 @@\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/dubbo/internal/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-registry-multiple/\n -rw-r--r--  2.0 unx     3980 b- defN 20-Apr-01 08:04 META-INF/DEPENDENCIES\n -rw-r--r--  2.0 unx    11358 b- defN 20-Apr-01 08:04 META-INF/LICENSE\n -rw-r--r--  2.0 unx      180 b- defN 20-Apr-01 08:04 META-INF/NOTICE\n--rw-r--r--  2.0 unx    12406 b- defN 20-Apr-01 08:04 org/apache/dubbo/registry/multiple/MultipleRegistry.java\n--rw-r--r--  2.0 unx     1214 b- defN 20-Apr-01 08:04 org/apache/dubbo/registry/multiple/MultipleRegistryFactory.java\n--rw-r--r--  2.0 unx     7811 b- defN 20-Apr-01 08:04 org/apache/dubbo/registry/multiple/MultipleRegistryServiceDiscovery.java\n--rw-r--r--  2.0 unx     1254 b- defN 20-Apr-01 08:04 org/apache/dubbo/registry/multiple/MultipleRegistryServiceDiscoveryFactory.java\n--rw-r--r--  2.0 unx       68 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory\n+-rw-r--r--  2.0 unx    12743 b- defN 20-Apr-01 08:04 org/apache/dubbo/registry/multiple/MultipleRegistry.java\n+-rw-r--r--  2.0 unx     1247 b- defN 20-Apr-01 08:04 org/apache/dubbo/registry/multiple/MultipleRegistryFactory.java\n+-rw-r--r--  2.0 unx     7982 b- defN 20-Apr-01 08:04 org/apache/dubbo/registry/multiple/MultipleRegistryServiceDiscovery.java\n+-rw-r--r--  2.0 unx     1282 b- defN 20-Apr-01 08:04 org/apache/dubbo/registry/multiple/MultipleRegistryServiceDiscoveryFactory.java\n+-rw-r--r--  2.0 unx       69 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory\n -rw-r--r--  2.0 unx       76 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscovery\n -rw-r--r--  2.0 unx       83 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory\n--rw-r--r--  2.0 unx     2889 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-registry-multiple/pom.xml\n+-rw-r--r--  2.0 unx     2814 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-registry-multiple/pom.xml\n -rw-r--r--  2.0 unx       78 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-registry-multiple/pom.properties\n-24 files, 41461 bytes uncompressed, 11899 bytes compressed:  71.3%\n+24 files, 41956 bytes uncompressed, 11938 bytes compressed:  71.5%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -281,943 +281,943 @@\n 16A0 Extract Zip Spec      14 (20) '2.0'\n 16A1 Extract OS            00 (0) 'MS-DOS'\n 16A2 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n 16A4 Compression Method    0008 (8) 'Deflated'\n 16A6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16AA CRC                   71E62C15 (1910909973)\n-16AE Compressed Size       000009FA (2554)\n-16B2 Uncompressed Size     00003076 (12406)\n+16AA CRC                   BDA5F435 (3181769781)\n+16AE Compressed Size       00000A07 (2567)\n+16B2 Uncompressed Size     000031C7 (12743)\n 16B6 Filename Length       0038 (56)\n 16B8 Extra Length          0000 (0)\n 16BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x16BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 16F2 PAYLOAD\n \n-20EC LOCAL HEADER #17      04034B50 (67324752)\n-20F0 Extract Zip Spec      14 (20) '2.0'\n-20F1 Extract OS            00 (0) 'MS-DOS'\n-20F2 General Purpose Flag  0800 (2048)\n+20F9 LOCAL HEADER #17      04034B50 (67324752)\n+20FD Extract Zip Spec      14 (20) '2.0'\n+20FE Extract OS            00 (0) 'MS-DOS'\n+20FF General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-20F4 Compression Method    0008 (8) 'Deflated'\n-20F6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-20FA CRC                   6ACD2956 (1791830358)\n-20FE Compressed Size       00000263 (611)\n-2102 Uncompressed Size     000004BE (1214)\n-2106 Filename Length       003F (63)\n-2108 Extra Length          0000 (0)\n-210A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2101 Compression Method    0008 (8) 'Deflated'\n+2103 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2107 CRC                   BA9C4A25 (3130804773)\n+210B Compressed Size       00000269 (617)\n+210F Uncompressed Size     000004DF (1247)\n+2113 Filename Length       003F (63)\n+2115 Extra Length          0000 (0)\n+2117 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x210A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2117: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2149 PAYLOAD\n+2156 PAYLOAD\n \n-23AC LOCAL HEADER #18      04034B50 (67324752)\n-23B0 Extract Zip Spec      14 (20) '2.0'\n-23B1 Extract OS            00 (0) 'MS-DOS'\n-23B2 General Purpose Flag  0800 (2048)\n+23BF LOCAL HEADER #18      04034B50 (67324752)\n+23C3 Extract Zip Spec      14 (20) '2.0'\n+23C4 Extract OS            00 (0) 'MS-DOS'\n+23C5 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-23B4 Compression Method    0008 (8) 'Deflated'\n-23B6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-23BA CRC                   32A6602D (849764397)\n-23BE Compressed Size       0000074E (1870)\n-23C2 Uncompressed Size     00001E83 (7811)\n-23C6 Filename Length       0048 (72)\n-23C8 Extra Length          0000 (0)\n-23CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+23C7 Compression Method    0008 (8) 'Deflated'\n+23C9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+23CD CRC                   23EFD54C (602920268)\n+23D1 Compressed Size       0000075F (1887)\n+23D5 Uncompressed Size     00001F2E (7982)\n+23D9 Filename Length       0048 (72)\n+23DB Extra Length          0000 (0)\n+23DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x23CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x23DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2412 PAYLOAD\n+2425 PAYLOAD\n \n-2B60 LOCAL HEADER #19      04034B50 (67324752)\n-2B64 Extract Zip Spec      14 (20) '2.0'\n-2B65 Extract OS            00 (0) 'MS-DOS'\n-2B66 General Purpose Flag  0800 (2048)\n+2B84 LOCAL HEADER #19      04034B50 (67324752)\n+2B88 Extract Zip Spec      14 (20) '2.0'\n+2B89 Extract OS            00 (0) 'MS-DOS'\n+2B8A General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-2B68 Compression Method    0008 (8) 'Deflated'\n-2B6A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2B6E CRC                   DA761D6A (3665173866)\n-2B72 Compressed Size       00000267 (615)\n-2B76 Uncompressed Size     000004E6 (1254)\n-2B7A Filename Length       004F (79)\n-2B7C Extra Length          0000 (0)\n-2B7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B8C Compression Method    0008 (8) 'Deflated'\n+2B8E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2B92 CRC                   CC2EC0C4 (3425616068)\n+2B96 Compressed Size       00000270 (624)\n+2B9A Uncompressed Size     00000502 (1282)\n+2B9E Filename Length       004F (79)\n+2BA0 Extra Length          0000 (0)\n+2BA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2BCD PAYLOAD\n+2BF1 PAYLOAD\n \n-2E34 LOCAL HEADER #20      04034B50 (67324752)\n-2E38 Extract Zip Spec      14 (20) '2.0'\n-2E39 Extract OS            00 (0) 'MS-DOS'\n-2E3A General Purpose Flag  0800 (2048)\n+2E61 LOCAL HEADER #20      04034B50 (67324752)\n+2E65 Extract Zip Spec      14 (20) '2.0'\n+2E66 Extract OS            00 (0) 'MS-DOS'\n+2E67 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-2E3C Compression Method    0008 (8) 'Deflated'\n-2E3E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2E42 CRC                   814DBD48 (2169355592)\n-2E46 Compressed Size       00000036 (54)\n-2E4A Uncompressed Size     00000044 (68)\n-2E4E Filename Length       0041 (65)\n-2E50 Extra Length          0000 (0)\n-2E52 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2E69 Compression Method    0008 (8) 'Deflated'\n+2E6B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2E6F CRC                   0510144B (84939851)\n+2E73 Compressed Size       00000037 (55)\n+2E77 Uncompressed Size     00000045 (69)\n+2E7B Filename Length       0041 (65)\n+2E7D Extra Length          0000 (0)\n+2E7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2E52: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2E7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2E93 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+2EC0 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-2EC9 LOCAL HEADER #21      04034B50 (67324752)\n-2ECD Extract Zip Spec      14 (20) '2.0'\n-2ECE Extract OS            00 (0) 'MS-DOS'\n-2ECF General Purpose Flag  0800 (2048)\n+2EF7 LOCAL HEADER #21      04034B50 (67324752)\n+2EFB Extract Zip Spec      14 (20) '2.0'\n+2EFC Extract OS            00 (0) 'MS-DOS'\n+2EFD General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-2ED1 Compression Method    0008 (8) 'Deflated'\n-2ED3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2ED7 CRC                   7462894A (1952614730)\n-2EDB Compressed Size       0000003E (62)\n-2EDF Uncompressed Size     0000004C (76)\n-2EE3 Filename Length       0049 (73)\n-2EE5 Extra Length          0000 (0)\n-2EE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2EFF Compression Method    0008 (8) 'Deflated'\n+2F01 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2F05 CRC                   7462894A (1952614730)\n+2F09 Compressed Size       0000003E (62)\n+2F0D Uncompressed Size     0000004C (76)\n+2F11 Filename Length       0049 (73)\n+2F13 Extra Length          0000 (0)\n+2F15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2EE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2F15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2F30 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+2F5E PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-2F6E LOCAL HEADER #22      04034B50 (67324752)\n-2F72 Extract Zip Spec      14 (20) '2.0'\n-2F73 Extract OS            00 (0) 'MS-DOS'\n-2F74 General Purpose Flag  0800 (2048)\n+2F9C LOCAL HEADER #22      04034B50 (67324752)\n+2FA0 Extract Zip Spec      14 (20) '2.0'\n+2FA1 Extract OS            00 (0) 'MS-DOS'\n+2FA2 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-2F76 Compression Method    0008 (8) 'Deflated'\n-2F78 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2F7C CRC                   EAE05BA4 (3940572068)\n-2F80 Compressed Size       00000045 (69)\n-2F84 Uncompressed Size     00000053 (83)\n-2F88 Filename Length       0050 (80)\n-2F8A Extra Length          0000 (0)\n-2F8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2FA4 Compression Method    0008 (8) 'Deflated'\n+2FA6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2FAA CRC                   EAE05BA4 (3940572068)\n+2FAE Compressed Size       00000045 (69)\n+2FB2 Uncompressed Size     00000053 (83)\n+2FB6 Filename Length       0050 (80)\n+2FB8 Extra Length          0000 (0)\n+2FBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2F8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2FBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2FDC PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+300A PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-3021 LOCAL HEADER #23      04034B50 (67324752)\n-3025 Extract Zip Spec      14 (20) '2.0'\n-3026 Extract OS            00 (0) 'MS-DOS'\n-3027 General Purpose Flag  0800 (2048)\n+304F LOCAL HEADER #23      04034B50 (67324752)\n+3053 Extract Zip Spec      14 (20) '2.0'\n+3054 Extract OS            00 (0) 'MS-DOS'\n+3055 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3029 Compression Method    0008 (8) 'Deflated'\n-302B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-302F CRC                   E3551669 (3814004329)\n-3033 Compressed Size       000003C6 (966)\n-3037 Uncompressed Size     00000B49 (2889)\n-303B Filename Length       003F (63)\n-303D Extra Length          0000 (0)\n-303F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3057 Compression Method    0008 (8) 'Deflated'\n+3059 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+305D CRC                   6A4E29DE (1783507422)\n+3061 Compressed Size       000003BF (959)\n+3065 Uncompressed Size     00000AFE (2814)\n+3069 Filename Length       003F (63)\n+306B Extra Length          0000 (0)\n+306D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x303F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x306D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-307E PAYLOAD\n+30AC PAYLOAD\n \n-3444 LOCAL HEADER #24      04034B50 (67324752)\n-3448 Extract Zip Spec      14 (20) '2.0'\n-3449 Extract OS            00 (0) 'MS-DOS'\n-344A General Purpose Flag  0800 (2048)\n+346B LOCAL HEADER #24      04034B50 (67324752)\n+346F Extract Zip Spec      14 (20) '2.0'\n+3470 Extract OS            00 (0) 'MS-DOS'\n+3471 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-344C Compression Method    0008 (8) 'Deflated'\n-344E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3452 CRC                   7158BA85 (1901640325)\n-3456 Compressed Size       0000004C (76)\n-345A Uncompressed Size     0000004E (78)\n-345E Filename Length       0046 (70)\n-3460 Extra Length          0000 (0)\n-3462 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3473 Compression Method    0008 (8) 'Deflated'\n+3475 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3479 CRC                   7158BA85 (1901640325)\n+347D Compressed Size       0000004C (76)\n+3481 Uncompressed Size     0000004E (78)\n+3485 Filename Length       0046 (70)\n+3487 Extra Length          0000 (0)\n+3489 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3462: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3489: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-34A8 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+34CF PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-34F4 CENTRAL HEADER #1     02014B50 (33639248)\n-34F8 Created Zip Spec      14 (20) '2.0'\n-34F9 Created OS            03 (3) 'Unix'\n-34FA Extract Zip Spec      14 (20) '2.0'\n-34FB Extract OS            00 (0) 'MS-DOS'\n-34FC General Purpose Flag  0800 (2048)\n+351B CENTRAL HEADER #1     02014B50 (33639248)\n+351F Created Zip Spec      14 (20) '2.0'\n+3520 Created OS            03 (3) 'Unix'\n+3521 Extract Zip Spec      14 (20) '2.0'\n+3522 Extract OS            00 (0) 'MS-DOS'\n+3523 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-34FE Compression Method    0008 (8) 'Deflated'\n-3500 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3504 CRC                   A689EB18 (2794056472)\n-3508 Compressed Size       00000042 (66)\n-350C Uncompressed Size     00000040 (64)\n-3510 Filename Length       0014 (20)\n-3512 Extra Length          0000 (0)\n-3514 Comment Length        0000 (0)\n-3516 Disk Start            0000 (0)\n-3518 Int File Attributes   0000 (0)\n+3525 Compression Method    0008 (8) 'Deflated'\n+3527 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+352B CRC                   A689EB18 (2794056472)\n+352F Compressed Size       00000042 (66)\n+3533 Uncompressed Size     00000040 (64)\n+3537 Filename Length       0014 (20)\n+3539 Extra Length          0000 (0)\n+353B Comment Length        0000 (0)\n+353D Disk Start            0000 (0)\n+353F Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-351A Ext File Attributes   81A40000 (2175008768)\n+3541 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-351E Local Header Offset   00000000 (0)\n-3522 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+3545 Local Header Offset   00000000 (0)\n+3549 Filename              'XXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3522: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3549: Filename 'XXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3536 CENTRAL HEADER #2     02014B50 (33639248)\n-353A Created Zip Spec      14 (20) '2.0'\n-353B Created OS            03 (3) 'Unix'\n-353C Extract Zip Spec      0A (10) '1.0'\n-353D Extract OS            00 (0) 'MS-DOS'\n-353E General Purpose Flag  0800 (2048)\n+355D CENTRAL HEADER #2     02014B50 (33639248)\n+3561 Created Zip Spec      14 (20) '2.0'\n+3562 Created OS            03 (3) 'Unix'\n+3563 Extract Zip Spec      0A (10) '1.0'\n+3564 Extract OS            00 (0) 'MS-DOS'\n+3565 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-3540 Compression Method    0000 (0) 'Stored'\n-3542 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3546 CRC                   00000000 (0)\n-354A Compressed Size       00000000 (0)\n-354E Uncompressed Size     00000000 (0)\n-3552 Filename Length       0009 (9)\n-3554 Extra Length          0000 (0)\n-3556 Comment Length        0000 (0)\n-3558 Disk Start            0000 (0)\n-355A Int File Attributes   0000 (0)\n+3567 Compression Method    0000 (0) 'Stored'\n+3569 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+356D CRC                   00000000 (0)\n+3571 Compressed Size       00000000 (0)\n+3575 Uncompressed Size     00000000 (0)\n+3579 Filename Length       0009 (9)\n+357B Extra Length          0000 (0)\n+357D Comment Length        0000 (0)\n+357F Disk Start            0000 (0)\n+3581 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-355C Ext File Attributes   41ED0010 (1106051088)\n+3583 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-3560 Local Header Offset   00000074 (116)\n-3564 Filename              'XXXXXXXXX'\n+3587 Local Header Offset   00000074 (116)\n+358B Filename              'XXXXXXXXX'\n #\n-# WARNING: Offset 0x3564: Filename 'XXXXXXXXX'\n+# WARNING: Offset 0x358B: Filename 'XXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x3564: Directory 'XXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x358B: Directory 'XXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x353C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n+# WARNING: Offset 0x3563: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n #\n \n-356D CENTRAL HEADER #3     02014B50 (33639248)\n-3571 Created Zip Spec      14 (20) '2.0'\n-3572 Created OS            03 (3) 'Unix'\n-3573 Extract Zip Spec      0A (10) '1.0'\n-3574 Extract OS            00 (0) 'MS-DOS'\n-3575 General Purpose Flag  0800 (2048)\n+3594 CENTRAL HEADER #3     02014B50 (33639248)\n+3598 Created Zip Spec      14 (20) '2.0'\n+3599 Created OS            03 (3) 'Unix'\n+359A Extract Zip Spec      0A (10) '1.0'\n+359B Extract OS            00 (0) 'MS-DOS'\n+359C General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-3577 Compression Method    0000 (0) 'Stored'\n-3579 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-357D CRC                   00000000 (0)\n-3581 Compressed Size       00000000 (0)\n-3585 Uncompressed Size     00000000 (0)\n-3589 Filename Length       0004 (4)\n-358B Extra Length          0000 (0)\n-358D Comment Length        0000 (0)\n-358F Disk Start            0000 (0)\n-3591 Int File Attributes   0000 (0)\n+359E Compression Method    0000 (0) 'Stored'\n+35A0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+35A4 CRC                   00000000 (0)\n+35A8 Compressed Size       00000000 (0)\n+35AC Uncompressed Size     00000000 (0)\n+35B0 Filename Length       0004 (4)\n+35B2 Extra Length          0000 (0)\n+35B4 Comment Length        0000 (0)\n+35B6 Disk Start            0000 (0)\n+35B8 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3593 Ext File Attributes   41ED0010 (1106051088)\n+35BA Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-3597 Local Header Offset   0000009B (155)\n-359B Filename              'XXXX'\n+35BE Local Header Offset   0000009B (155)\n+35C2 Filename              'XXXX'\n #\n-# WARNING: Offset 0x359B: Filename 'XXXX'\n+# WARNING: Offset 0x35C2: Filename 'XXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x359B: Directory 'XXXX' must end in a '/'\n+# ERROR: Offset 0x35C2: Directory 'XXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x3573: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n+# WARNING: Offset 0x359A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n #\n \n-359F CENTRAL HEADER #4     02014B50 (33639248)\n-35A3 Created Zip Spec      14 (20) '2.0'\n-35A4 Created OS            03 (3) 'Unix'\n-35A5 Extract Zip Spec      0A (10) '1.0'\n-35A6 Extract OS            00 (0) 'MS-DOS'\n-35A7 General Purpose Flag  0800 (2048)\n+35C6 CENTRAL HEADER #4     02014B50 (33639248)\n+35CA Created Zip Spec      14 (20) '2.0'\n+35CB Created OS            03 (3) 'Unix'\n+35CC Extract Zip Spec      0A (10) '1.0'\n+35CD Extract OS            00 (0) 'MS-DOS'\n+35CE General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-35A9 Compression Method    0000 (0) 'Stored'\n-35AB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-35AF CRC                   00000000 (0)\n-35B3 Compressed Size       00000000 (0)\n-35B7 Uncompressed Size     00000000 (0)\n-35BB Filename Length       000B (11)\n-35BD Extra Length          0000 (0)\n-35BF Comment Length        0000 (0)\n-35C1 Disk Start            0000 (0)\n-35C3 Int File Attributes   0000 (0)\n+35D0 Compression Method    0000 (0) 'Stored'\n+35D2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+35D6 CRC                   00000000 (0)\n+35DA Compressed Size       00000000 (0)\n+35DE Uncompressed Size     00000000 (0)\n+35E2 Filename Length       000B (11)\n+35E4 Extra Length          0000 (0)\n+35E6 Comment Length        0000 (0)\n+35E8 Disk Start            0000 (0)\n+35EA Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-35C5 Ext File Attributes   41ED0010 (1106051088)\n+35EC Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-35C9 Local Header Offset   000000BD (189)\n-35CD Filename              'XXXXXXXXXXX'\n+35F0 Local Header Offset   000000BD (189)\n+35F4 Filename              'XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x35CD: Filename 'XXXXXXXXXXX'\n+# WARNING: Offset 0x35F4: Filename 'XXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x35CD: Directory 'XXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x35F4: Directory 'XXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x35A5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n+# WARNING: Offset 0x35CC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n #\n \n-35D8 CENTRAL HEADER #5     02014B50 (33639248)\n-35DC Created Zip Spec      14 (20) '2.0'\n-35DD Created OS            03 (3) 'Unix'\n-35DE Extract Zip Spec      0A (10) '1.0'\n-35DF Extract OS            00 (0) 'MS-DOS'\n-35E0 General Purpose Flag  0800 (2048)\n+35FF CENTRAL HEADER #5     02014B50 (33639248)\n+3603 Created Zip Spec      14 (20) '2.0'\n+3604 Created OS            03 (3) 'Unix'\n+3605 Extract Zip Spec      0A (10) '1.0'\n+3606 Extract OS            00 (0) 'MS-DOS'\n+3607 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-35E2 Compression Method    0000 (0) 'Stored'\n-35E4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-35E8 CRC                   00000000 (0)\n-35EC Compressed Size       00000000 (0)\n-35F0 Uncompressed Size     00000000 (0)\n-35F4 Filename Length       0011 (17)\n-35F6 Extra Length          0000 (0)\n-35F8 Comment Length        0000 (0)\n-35FA Disk Start            0000 (0)\n-35FC Int File Attributes   0000 (0)\n+3609 Compression Method    0000 (0) 'Stored'\n+360B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+360F CRC                   00000000 (0)\n+3613 Compressed Size       00000000 (0)\n+3617 Uncompressed Size     00000000 (0)\n+361B Filename Length       0011 (17)\n+361D Extra Length          0000 (0)\n+361F Comment Length        0000 (0)\n+3621 Disk Start            0000 (0)\n+3623 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-35FE Ext File Attributes   41ED0010 (1106051088)\n+3625 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-3602 Local Header Offset   000000E6 (230)\n-3606 Filename              'XXXXXXXXXXXXXXXXX'\n+3629 Local Header Offset   000000E6 (230)\n+362D Filename              'XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3606: Filename 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x362D: Filename 'XXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x3606: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x362D: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x35DE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3605: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n #\n \n-3617 CENTRAL HEADER #6     02014B50 (33639248)\n-361B Created Zip Spec      14 (20) '2.0'\n-361C Created OS            03 (3) 'Unix'\n-361D Extract Zip Spec      0A (10) '1.0'\n-361E Extract OS            00 (0) 'MS-DOS'\n-361F General Purpose Flag  0800 (2048)\n+363E CENTRAL HEADER #6     02014B50 (33639248)\n+3642 Created Zip Spec      14 (20) '2.0'\n+3643 Created OS            03 (3) 'Unix'\n+3644 Extract Zip Spec      0A (10) '1.0'\n+3645 Extract OS            00 (0) 'MS-DOS'\n+3646 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-3621 Compression Method    0000 (0) 'Stored'\n-3623 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3627 CRC                   00000000 (0)\n-362B Compressed Size       00000000 (0)\n-362F Uncompressed Size     00000000 (0)\n-3633 Filename Length       001A (26)\n-3635 Extra Length          0000 (0)\n-3637 Comment Length        0000 (0)\n-3639 Disk Start            0000 (0)\n-363B Int File Attributes   0000 (0)\n+3648 Compression Method    0000 (0) 'Stored'\n+364A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+364E CRC                   00000000 (0)\n+3652 Compressed Size       00000000 (0)\n+3656 Uncompressed Size     00000000 (0)\n+365A Filename Length       001A (26)\n+365C Extra Length          0000 (0)\n+365E Comment Length        0000 (0)\n+3660 Disk Start            0000 (0)\n+3662 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-363D Ext File Attributes   41ED0010 (1106051088)\n+3664 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-3641 Local Header Offset   00000115 (277)\n-3645 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3668 Local Header Offset   00000115 (277)\n+366C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3645: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x366C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x3645: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x366C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x361D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3644: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-365F CENTRAL HEADER #7     02014B50 (33639248)\n-3663 Created Zip Spec      14 (20) '2.0'\n-3664 Created OS            03 (3) 'Unix'\n-3665 Extract Zip Spec      0A (10) '1.0'\n-3666 Extract OS            00 (0) 'MS-DOS'\n-3667 General Purpose Flag  0800 (2048)\n+3686 CENTRAL HEADER #7     02014B50 (33639248)\n+368A Created Zip Spec      14 (20) '2.0'\n+368B Created OS            03 (3) 'Unix'\n+368C Extract Zip Spec      0A (10) '1.0'\n+368D Extract OS            00 (0) 'MS-DOS'\n+368E General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-3669 Compression Method    0000 (0) 'Stored'\n-366B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-366F CRC                   00000000 (0)\n-3673 Compressed Size       00000000 (0)\n-3677 Uncompressed Size     00000000 (0)\n-367B Filename Length       0023 (35)\n-367D Extra Length          0000 (0)\n-367F Comment Length        0000 (0)\n-3681 Disk Start            0000 (0)\n-3683 Int File Attributes   0000 (0)\n+3690 Compression Method    0000 (0) 'Stored'\n+3692 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3696 CRC                   00000000 (0)\n+369A Compressed Size       00000000 (0)\n+369E Uncompressed Size     00000000 (0)\n+36A2 Filename Length       0023 (35)\n+36A4 Extra Length          0000 (0)\n+36A6 Comment Length        0000 (0)\n+36A8 Disk Start            0000 (0)\n+36AA Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3685 Ext File Attributes   41ED0010 (1106051088)\n+36AC Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-3689 Local Header Offset   0000014D (333)\n-368D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+36B0 Local Header Offset   0000014D (333)\n+36B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x368D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x36B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x368D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x36B4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x3665: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x368C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-36B0 CENTRAL HEADER #8     02014B50 (33639248)\n-36B4 Created Zip Spec      14 (20) '2.0'\n-36B5 Created OS            03 (3) 'Unix'\n-36B6 Extract Zip Spec      0A (10) '1.0'\n-36B7 Extract OS            00 (0) 'MS-DOS'\n-36B8 General Purpose Flag  0800 (2048)\n+36D7 CENTRAL HEADER #8     02014B50 (33639248)\n+36DB Created Zip Spec      14 (20) '2.0'\n+36DC Created OS            03 (3) 'Unix'\n+36DD Extract Zip Spec      0A (10) '1.0'\n+36DE Extract OS            00 (0) 'MS-DOS'\n+36DF General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-36BA Compression Method    0000 (0) 'Stored'\n-36BC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-36C0 CRC                   00000000 (0)\n-36C4 Compressed Size       00000000 (0)\n-36C8 Uncompressed Size     00000000 (0)\n-36CC Filename Length       000F (15)\n-36CE Extra Length          0000 (0)\n-36D0 Comment Length        0000 (0)\n-36D2 Disk Start            0000 (0)\n-36D4 Int File Attributes   0000 (0)\n+36E1 Compression Method    0000 (0) 'Stored'\n+36E3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+36E7 CRC                   00000000 (0)\n+36EB Compressed Size       00000000 (0)\n+36EF Uncompressed Size     00000000 (0)\n+36F3 Filename Length       000F (15)\n+36F5 Extra Length          0000 (0)\n+36F7 Comment Length        0000 (0)\n+36F9 Disk Start            0000 (0)\n+36FB Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-36D6 Ext File Attributes   41ED0010 (1106051088)\n+36FD Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-36DA Local Header Offset   0000018E (398)\n-36DE Filename              'XXXXXXXXXXXXXXX'\n+3701 Local Header Offset   0000018E (398)\n+3705 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x36DE: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3705: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x36DE: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x3705: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x36B6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x36DD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-36ED CENTRAL HEADER #9     02014B50 (33639248)\n-36F1 Created Zip Spec      14 (20) '2.0'\n-36F2 Created OS            03 (3) 'Unix'\n-36F3 Extract Zip Spec      0A (10) '1.0'\n-36F4 Extract OS            00 (0) 'MS-DOS'\n-36F5 General Purpose Flag  0800 (2048)\n+3714 CENTRAL HEADER #9     02014B50 (33639248)\n+3718 Created Zip Spec      14 (20) '2.0'\n+3719 Created OS            03 (3) 'Unix'\n+371A Extract Zip Spec      0A (10) '1.0'\n+371B Extract OS            00 (0) 'MS-DOS'\n+371C General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-36F7 Compression Method    0000 (0) 'Stored'\n-36F9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-36FD CRC                   00000000 (0)\n-3701 Compressed Size       00000000 (0)\n-3705 Uncompressed Size     00000000 (0)\n-3709 Filename Length       0018 (24)\n-370B Extra Length          0000 (0)\n-370D Comment Length        0000 (0)\n-370F Disk Start            0000 (0)\n-3711 Int File Attributes   0000 (0)\n+371E Compression Method    0000 (0) 'Stored'\n+3720 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3724 CRC                   00000000 (0)\n+3728 Compressed Size       00000000 (0)\n+372C Uncompressed Size     00000000 (0)\n+3730 Filename Length       0018 (24)\n+3732 Extra Length          0000 (0)\n+3734 Comment Length        0000 (0)\n+3736 Disk Start            0000 (0)\n+3738 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3713 Ext File Attributes   41ED0010 (1106051088)\n+373A Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-3717 Local Header Offset   000001BB (443)\n-371B Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+373E Local Header Offset   000001BB (443)\n+3742 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x371B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3742: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x371B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x3742: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x36F3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x371A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-3733 CENTRAL HEADER #10    02014B50 (33639248)\n-3737 Created Zip Spec      14 (20) '2.0'\n-3738 Created OS            03 (3) 'Unix'\n-3739 Extract Zip Spec      0A (10) '1.0'\n-373A Extract OS            00 (0) 'MS-DOS'\n-373B General Purpose Flag  0800 (2048)\n+375A CENTRAL HEADER #10    02014B50 (33639248)\n+375E Created Zip Spec      14 (20) '2.0'\n+375F Created OS            03 (3) 'Unix'\n+3760 Extract Zip Spec      0A (10) '1.0'\n+3761 Extract OS            00 (0) 'MS-DOS'\n+3762 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-373D Compression Method    0000 (0) 'Stored'\n-373F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3743 CRC                   00000000 (0)\n-3747 Compressed Size       00000000 (0)\n-374B Uncompressed Size     00000000 (0)\n-374F Filename Length       000F (15)\n-3751 Extra Length          0000 (0)\n-3753 Comment Length        0000 (0)\n-3755 Disk Start            0000 (0)\n-3757 Int File Attributes   0000 (0)\n+3764 Compression Method    0000 (0) 'Stored'\n+3766 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+376A CRC                   00000000 (0)\n+376E Compressed Size       00000000 (0)\n+3772 Uncompressed Size     00000000 (0)\n+3776 Filename Length       000F (15)\n+3778 Extra Length          0000 (0)\n+377A Comment Length        0000 (0)\n+377C Disk Start            0000 (0)\n+377E Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3759 Ext File Attributes   41ED0010 (1106051088)\n+3780 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-375D Local Header Offset   000001F1 (497)\n-3761 Filename              'XXXXXXXXXXXXXXX'\n+3784 Local Header Offset   000001F1 (497)\n+3788 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3761: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3788: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x3761: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x3788: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x3739: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3760: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-3770 CENTRAL HEADER #11    02014B50 (33639248)\n-3774 Created Zip Spec      14 (20) '2.0'\n-3775 Created OS            03 (3) 'Unix'\n-3776 Extract Zip Spec      0A (10) '1.0'\n-3777 Extract OS            00 (0) 'MS-DOS'\n-3778 General Purpose Flag  0800 (2048)\n+3797 CENTRAL HEADER #11    02014B50 (33639248)\n+379B Created Zip Spec      14 (20) '2.0'\n+379C Created OS            03 (3) 'Unix'\n+379D Extract Zip Spec      0A (10) '1.0'\n+379E Extract OS            00 (0) 'MS-DOS'\n+379F General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-377A Compression Method    0000 (0) 'Stored'\n-377C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3780 CRC                   00000000 (0)\n-3784 Compressed Size       00000000 (0)\n-3788 Uncompressed Size     00000000 (0)\n-378C Filename Length       0020 (32)\n-378E Extra Length          0000 (0)\n-3790 Comment Length        0000 (0)\n-3792 Disk Start            0000 (0)\n-3794 Int File Attributes   0000 (0)\n+37A1 Compression Method    0000 (0) 'Stored'\n+37A3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+37A7 CRC                   00000000 (0)\n+37AB Compressed Size       00000000 (0)\n+37AF Uncompressed Size     00000000 (0)\n+37B3 Filename Length       0020 (32)\n+37B5 Extra Length          0000 (0)\n+37B7 Comment Length        0000 (0)\n+37B9 Disk Start            0000 (0)\n+37BB Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3796 Ext File Attributes   41ED0010 (1106051088)\n+37BD Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-379A Local Header Offset   0000021E (542)\n-379E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+37C1 Local Header Offset   0000021E (542)\n+37C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x379E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x37C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x379E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x37C5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x3776: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x379D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-37BE CENTRAL HEADER #12    02014B50 (33639248)\n-37C2 Created Zip Spec      14 (20) '2.0'\n-37C3 Created OS            03 (3) 'Unix'\n-37C4 Extract Zip Spec      0A (10) '1.0'\n-37C5 Extract OS            00 (0) 'MS-DOS'\n-37C6 General Purpose Flag  0800 (2048)\n+37E5 CENTRAL HEADER #12    02014B50 (33639248)\n+37E9 Created Zip Spec      14 (20) '2.0'\n+37EA Created OS            03 (3) 'Unix'\n+37EB Extract Zip Spec      0A (10) '1.0'\n+37EC Extract OS            00 (0) 'MS-DOS'\n+37ED General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-37C8 Compression Method    0000 (0) 'Stored'\n-37CA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-37CE CRC                   00000000 (0)\n-37D2 Compressed Size       00000000 (0)\n-37D6 Uncompressed Size     00000000 (0)\n-37DA Filename Length       0038 (56)\n-37DC Extra Length          0000 (0)\n-37DE Comment Length        0000 (0)\n-37E0 Disk Start            0000 (0)\n-37E2 Int File Attributes   0000 (0)\n+37EF Compression Method    0000 (0) 'Stored'\n+37F1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+37F5 CRC                   00000000 (0)\n+37F9 Compressed Size       00000000 (0)\n+37FD Uncompressed Size     00000000 (0)\n+3801 Filename Length       0038 (56)\n+3803 Extra Length          0000 (0)\n+3805 Comment Length        0000 (0)\n+3807 Disk Start            0000 (0)\n+3809 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-37E4 Ext File Attributes   41ED0010 (1106051088)\n+380B Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-37E8 Local Header Offset   0000025C (604)\n-37EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+380F Local Header Offset   0000025C (604)\n+3813 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x37EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3813: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x37EC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x3813: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x37C4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x37EB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-3824 CENTRAL HEADER #13    02014B50 (33639248)\n-3828 Created Zip Spec      14 (20) '2.0'\n-3829 Created OS            03 (3) 'Unix'\n-382A Extract Zip Spec      14 (20) '2.0'\n-382B Extract OS            00 (0) 'MS-DOS'\n-382C General Purpose Flag  0800 (2048)\n+384B CENTRAL HEADER #13    02014B50 (33639248)\n+384F Created Zip Spec      14 (20) '2.0'\n+3850 Created OS            03 (3) 'Unix'\n+3851 Extract Zip Spec      14 (20) '2.0'\n+3852 Extract OS            00 (0) 'MS-DOS'\n+3853 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-382E Compression Method    0008 (8) 'Deflated'\n-3830 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3834 CRC                   FCE7E274 (4243055220)\n-3838 Compressed Size       0000036C (876)\n-383C Uncompressed Size     00000F8C (3980)\n-3840 Filename Length       0015 (21)\n-3842 Extra Length          0000 (0)\n-3844 Comment Length        0000 (0)\n-3846 Disk Start            0000 (0)\n-3848 Int File Attributes   0000 (0)\n+3855 Compression Method    0008 (8) 'Deflated'\n+3857 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+385B CRC                   FCE7E274 (4243055220)\n+385F Compressed Size       0000036C (876)\n+3863 Uncompressed Size     00000F8C (3980)\n+3867 Filename Length       0015 (21)\n+3869 Extra Length          0000 (0)\n+386B Comment Length        0000 (0)\n+386D Disk Start            0000 (0)\n+386F Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-384A Ext File Attributes   81A40000 (2175008768)\n+3871 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-384E Local Header Offset   000002B2 (690)\n-3852 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+3875 Local Header Offset   000002B2 (690)\n+3879 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3852: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3879: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3867 CENTRAL HEADER #14    02014B50 (33639248)\n-386B Created Zip Spec      14 (20) '2.0'\n-386C Created OS            03 (3) 'Unix'\n-386D Extract Zip Spec      14 (20) '2.0'\n-386E Extract OS            00 (0) 'MS-DOS'\n-386F General Purpose Flag  0800 (2048)\n+388E CENTRAL HEADER #14    02014B50 (33639248)\n+3892 Created Zip Spec      14 (20) '2.0'\n+3893 Created OS            03 (3) 'Unix'\n+3894 Extract Zip Spec      14 (20) '2.0'\n+3895 Extract OS            00 (0) 'MS-DOS'\n+3896 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3871 Compression Method    0008 (8) 'Deflated'\n-3873 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3877 CRC                   86E2B4B4 (2263004340)\n-387B Compressed Size       00000F6D (3949)\n-387F Uncompressed Size     00002C5E (11358)\n-3883 Filename Length       0010 (16)\n-3885 Extra Length          0000 (0)\n-3887 Comment Length        0000 (0)\n-3889 Disk Start            0000 (0)\n-388B Int File Attributes   0000 (0)\n+3898 Compression Method    0008 (8) 'Deflated'\n+389A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+389E CRC                   86E2B4B4 (2263004340)\n+38A2 Compressed Size       00000F6D (3949)\n+38A6 Uncompressed Size     00002C5E (11358)\n+38AA Filename Length       0010 (16)\n+38AC Extra Length          0000 (0)\n+38AE Comment Length        0000 (0)\n+38B0 Disk Start            0000 (0)\n+38B2 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-388D Ext File Attributes   81A40000 (2175008768)\n+38B4 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3891 Local Header Offset   00000651 (1617)\n-3895 Filename              'XXXXXXXXXXXXXXXX'\n+38B8 Local Header Offset   00000651 (1617)\n+38BC Filename              'XXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3895: Filename 'XXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x38BC: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-38A5 CENTRAL HEADER #15    02014B50 (33639248)\n-38A9 Created Zip Spec      14 (20) '2.0'\n-38AA Created OS            03 (3) 'Unix'\n-38AB Extract Zip Spec      14 (20) '2.0'\n-38AC Extract OS            00 (0) 'MS-DOS'\n-38AD General Purpose Flag  0800 (2048)\n+38CC CENTRAL HEADER #15    02014B50 (33639248)\n+38D0 Created Zip Spec      14 (20) '2.0'\n+38D1 Created OS            03 (3) 'Unix'\n+38D2 Extract Zip Spec      14 (20) '2.0'\n+38D3 Extract OS            00 (0) 'MS-DOS'\n+38D4 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-38AF Compression Method    0008 (8) 'Deflated'\n-38B1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-38B5 CRC                   8879AD67 (2289675623)\n-38B9 Compressed Size       00000083 (131)\n-38BD Uncompressed Size     000000B4 (180)\n-38C1 Filename Length       000F (15)\n-38C3 Extra Length          0000 (0)\n-38C5 Comment Length        0000 (0)\n-38C7 Disk Start            0000 (0)\n-38C9 Int File Attributes   0000 (0)\n+38D6 Compression Method    0008 (8) 'Deflated'\n+38D8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+38DC CRC                   8879AD67 (2289675623)\n+38E0 Compressed Size       00000083 (131)\n+38E4 Uncompressed Size     000000B4 (180)\n+38E8 Filename Length       000F (15)\n+38EA Extra Length          0000 (0)\n+38EC Comment Length        0000 (0)\n+38EE Disk Start            0000 (0)\n+38F0 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-38CB Ext File Attributes   81A40000 (2175008768)\n+38F2 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-38CF Local Header Offset   000015EC (5612)\n-38D3 Filename              'XXXXXXXXXXXXXXX'\n+38F6 Local Header Offset   000015EC (5612)\n+38FA Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x38D3: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x38FA: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-38E2 CENTRAL HEADER #16    02014B50 (33639248)\n-38E6 Created Zip Spec      14 (20) '2.0'\n-38E7 Created OS            03 (3) 'Unix'\n-38E8 Extract Zip Spec      14 (20) '2.0'\n-38E9 Extract OS            00 (0) 'MS-DOS'\n-38EA General Purpose Flag  0800 (2048)\n+3909 CENTRAL HEADER #16    02014B50 (33639248)\n+390D Created Zip Spec      14 (20) '2.0'\n+390E Created OS            03 (3) 'Unix'\n+390F Extract Zip Spec      14 (20) '2.0'\n+3910 Extract OS            00 (0) 'MS-DOS'\n+3911 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-38EC Compression Method    0008 (8) 'Deflated'\n-38EE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-38F2 CRC                   71E62C15 (1910909973)\n-38F6 Compressed Size       000009FA (2554)\n-38FA Uncompressed Size     00003076 (12406)\n-38FE Filename Length       0038 (56)\n-3900 Extra Length          0000 (0)\n-3902 Comment Length        0000 (0)\n-3904 Disk Start            0000 (0)\n-3906 Int File Attributes   0000 (0)\n+3913 Compression Method    0008 (8) 'Deflated'\n+3915 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3919 CRC                   BDA5F435 (3181769781)\n+391D Compressed Size       00000A07 (2567)\n+3921 Uncompressed Size     000031C7 (12743)\n+3925 Filename Length       0038 (56)\n+3927 Extra Length          0000 (0)\n+3929 Comment Length        0000 (0)\n+392B Disk Start            0000 (0)\n+392D Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3908 Ext File Attributes   81A40000 (2175008768)\n+392F Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-390C Local Header Offset   0000169C (5788)\n-3910 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3933 Local Header Offset   0000169C (5788)\n+3937 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3910: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3937: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3948 CENTRAL HEADER #17    02014B50 (33639248)\n-394C Created Zip Spec      14 (20) '2.0'\n-394D Created OS            03 (3) 'Unix'\n-394E Extract Zip Spec      14 (20) '2.0'\n-394F Extract OS            00 (0) 'MS-DOS'\n-3950 General Purpose Flag  0800 (2048)\n+396F CENTRAL HEADER #17    02014B50 (33639248)\n+3973 Created Zip Spec      14 (20) '2.0'\n+3974 Created OS            03 (3) 'Unix'\n+3975 Extract Zip Spec      14 (20) '2.0'\n+3976 Extract OS            00 (0) 'MS-DOS'\n+3977 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3952 Compression Method    0008 (8) 'Deflated'\n-3954 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3958 CRC                   6ACD2956 (1791830358)\n-395C Compressed Size       00000263 (611)\n-3960 Uncompressed Size     000004BE (1214)\n-3964 Filename Length       003F (63)\n-3966 Extra Length          0000 (0)\n-3968 Comment Length        0000 (0)\n-396A Disk Start            0000 (0)\n-396C Int File Attributes   0000 (0)\n+3979 Compression Method    0008 (8) 'Deflated'\n+397B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+397F CRC                   BA9C4A25 (3130804773)\n+3983 Compressed Size       00000269 (617)\n+3987 Uncompressed Size     000004DF (1247)\n+398B Filename Length       003F (63)\n+398D Extra Length          0000 (0)\n+398F Comment Length        0000 (0)\n+3991 Disk Start            0000 (0)\n+3993 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-396E Ext File Attributes   81A40000 (2175008768)\n+3995 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3972 Local Header Offset   000020EC (8428)\n-3976 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3999 Local Header Offset   000020F9 (8441)\n+399D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3976: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x399D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-39B5 CENTRAL HEADER #18    02014B50 (33639248)\n-39B9 Created Zip Spec      14 (20) '2.0'\n-39BA Created OS            03 (3) 'Unix'\n-39BB Extract Zip Spec      14 (20) '2.0'\n-39BC Extract OS            00 (0) 'MS-DOS'\n-39BD General Purpose Flag  0800 (2048)\n+39DC CENTRAL HEADER #18    02014B50 (33639248)\n+39E0 Created Zip Spec      14 (20) '2.0'\n+39E1 Created OS            03 (3) 'Unix'\n+39E2 Extract Zip Spec      14 (20) '2.0'\n+39E3 Extract OS            00 (0) 'MS-DOS'\n+39E4 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-39BF Compression Method    0008 (8) 'Deflated'\n-39C1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-39C5 CRC                   32A6602D (849764397)\n-39C9 Compressed Size       0000074E (1870)\n-39CD Uncompressed Size     00001E83 (7811)\n-39D1 Filename Length       0048 (72)\n-39D3 Extra Length          0000 (0)\n-39D5 Comment Length        0000 (0)\n-39D7 Disk Start            0000 (0)\n-39D9 Int File Attributes   0000 (0)\n+39E6 Compression Method    0008 (8) 'Deflated'\n+39E8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+39EC CRC                   23EFD54C (602920268)\n+39F0 Compressed Size       0000075F (1887)\n+39F4 Uncompressed Size     00001F2E (7982)\n+39F8 Filename Length       0048 (72)\n+39FA Extra Length          0000 (0)\n+39FC Comment Length        0000 (0)\n+39FE Disk Start            0000 (0)\n+3A00 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-39DB Ext File Attributes   81A40000 (2175008768)\n+3A02 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-39DF Local Header Offset   000023AC (9132)\n-39E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3A06 Local Header Offset   000023BF (9151)\n+3A0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x39E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3A0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3A2B CENTRAL HEADER #19    02014B50 (33639248)\n-3A2F Created Zip Spec      14 (20) '2.0'\n-3A30 Created OS            03 (3) 'Unix'\n-3A31 Extract Zip Spec      14 (20) '2.0'\n-3A32 Extract OS            00 (0) 'MS-DOS'\n-3A33 General Purpose Flag  0800 (2048)\n+3A52 CENTRAL HEADER #19    02014B50 (33639248)\n+3A56 Created Zip Spec      14 (20) '2.0'\n+3A57 Created OS            03 (3) 'Unix'\n+3A58 Extract Zip Spec      14 (20) '2.0'\n+3A59 Extract OS            00 (0) 'MS-DOS'\n+3A5A General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3A35 Compression Method    0008 (8) 'Deflated'\n-3A37 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3A3B CRC                   DA761D6A (3665173866)\n-3A3F Compressed Size       00000267 (615)\n-3A43 Uncompressed Size     000004E6 (1254)\n-3A47 Filename Length       004F (79)\n-3A49 Extra Length          0000 (0)\n-3A4B Comment Length        0000 (0)\n-3A4D Disk Start            0000 (0)\n-3A4F Int File Attributes   0000 (0)\n+3A5C Compression Method    0008 (8) 'Deflated'\n+3A5E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3A62 CRC                   CC2EC0C4 (3425616068)\n+3A66 Compressed Size       00000270 (624)\n+3A6A Uncompressed Size     00000502 (1282)\n+3A6E Filename Length       004F (79)\n+3A70 Extra Length          0000 (0)\n+3A72 Comment Length        0000 (0)\n+3A74 Disk Start            0000 (0)\n+3A76 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3A51 Ext File Attributes   81A40000 (2175008768)\n+3A78 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3A55 Local Header Offset   00002B60 (11104)\n-3A59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3A7C Local Header Offset   00002B84 (11140)\n+3A80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3A59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3A80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3AA8 CENTRAL HEADER #20    02014B50 (33639248)\n-3AAC Created Zip Spec      14 (20) '2.0'\n-3AAD Created OS            03 (3) 'Unix'\n-3AAE Extract Zip Spec      14 (20) '2.0'\n-3AAF Extract OS            00 (0) 'MS-DOS'\n-3AB0 General Purpose Flag  0800 (2048)\n+3ACF CENTRAL HEADER #20    02014B50 (33639248)\n+3AD3 Created Zip Spec      14 (20) '2.0'\n+3AD4 Created OS            03 (3) 'Unix'\n+3AD5 Extract Zip Spec      14 (20) '2.0'\n+3AD6 Extract OS            00 (0) 'MS-DOS'\n+3AD7 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3AB2 Compression Method    0008 (8) 'Deflated'\n-3AB4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3AB8 CRC                   814DBD48 (2169355592)\n-3ABC Compressed Size       00000036 (54)\n-3AC0 Uncompressed Size     00000044 (68)\n-3AC4 Filename Length       0041 (65)\n-3AC6 Extra Length          0000 (0)\n-3AC8 Comment Length        0000 (0)\n-3ACA Disk Start            0000 (0)\n-3ACC Int File Attributes   0000 (0)\n+3AD9 Compression Method    0008 (8) 'Deflated'\n+3ADB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3ADF CRC                   0510144B (84939851)\n+3AE3 Compressed Size       00000037 (55)\n+3AE7 Uncompressed Size     00000045 (69)\n+3AEB Filename Length       0041 (65)\n+3AED Extra Length          0000 (0)\n+3AEF Comment Length        0000 (0)\n+3AF1 Disk Start            0000 (0)\n+3AF3 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3ACE Ext File Attributes   81A40000 (2175008768)\n+3AF5 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3AD2 Local Header Offset   00002E34 (11828)\n-3AD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3AF9 Local Header Offset   00002E61 (11873)\n+3AFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3AD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3AFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3B17 CENTRAL HEADER #21    02014B50 (33639248)\n-3B1B Created Zip Spec      14 (20) '2.0'\n-3B1C Created OS            03 (3) 'Unix'\n-3B1D Extract Zip Spec      14 (20) '2.0'\n-3B1E Extract OS            00 (0) 'MS-DOS'\n-3B1F General Purpose Flag  0800 (2048)\n+3B3E CENTRAL HEADER #21    02014B50 (33639248)\n+3B42 Created Zip Spec      14 (20) '2.0'\n+3B43 Created OS            03 (3) 'Unix'\n+3B44 Extract Zip Spec      14 (20) '2.0'\n+3B45 Extract OS            00 (0) 'MS-DOS'\n+3B46 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3B21 Compression Method    0008 (8) 'Deflated'\n-3B23 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3B27 CRC                   7462894A (1952614730)\n-3B2B Compressed Size       0000003E (62)\n-3B2F Uncompressed Size     0000004C (76)\n-3B33 Filename Length       0049 (73)\n-3B35 Extra Length          0000 (0)\n-3B37 Comment Length        0000 (0)\n-3B39 Disk Start            0000 (0)\n-3B3B Int File Attributes   0000 (0)\n+3B48 Compression Method    0008 (8) 'Deflated'\n+3B4A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3B4E CRC                   7462894A (1952614730)\n+3B52 Compressed Size       0000003E (62)\n+3B56 Uncompressed Size     0000004C (76)\n+3B5A Filename Length       0049 (73)\n+3B5C Extra Length          0000 (0)\n+3B5E Comment Length        0000 (0)\n+3B60 Disk Start            0000 (0)\n+3B62 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3B3D Ext File Attributes   81A40000 (2175008768)\n+3B64 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3B41 Local Header Offset   00002EC9 (11977)\n-3B45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3B68 Local Header Offset   00002EF7 (12023)\n+3B6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3B45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3B6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3B8E CENTRAL HEADER #22    02014B50 (33639248)\n-3B92 Created Zip Spec      14 (20) '2.0'\n-3B93 Created OS            03 (3) 'Unix'\n-3B94 Extract Zip Spec      14 (20) '2.0'\n-3B95 Extract OS            00 (0) 'MS-DOS'\n-3B96 General Purpose Flag  0800 (2048)\n+3BB5 CENTRAL HEADER #22    02014B50 (33639248)\n+3BB9 Created Zip Spec      14 (20) '2.0'\n+3BBA Created OS            03 (3) 'Unix'\n+3BBB Extract Zip Spec      14 (20) '2.0'\n+3BBC Extract OS            00 (0) 'MS-DOS'\n+3BBD General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3B98 Compression Method    0008 (8) 'Deflated'\n-3B9A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3B9E CRC                   EAE05BA4 (3940572068)\n-3BA2 Compressed Size       00000045 (69)\n-3BA6 Uncompressed Size     00000053 (83)\n-3BAA Filename Length       0050 (80)\n-3BAC Extra Length          0000 (0)\n-3BAE Comment Length        0000 (0)\n-3BB0 Disk Start            0000 (0)\n-3BB2 Int File Attributes   0000 (0)\n+3BBF Compression Method    0008 (8) 'Deflated'\n+3BC1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3BC5 CRC                   EAE05BA4 (3940572068)\n+3BC9 Compressed Size       00000045 (69)\n+3BCD Uncompressed Size     00000053 (83)\n+3BD1 Filename Length       0050 (80)\n+3BD3 Extra Length          0000 (0)\n+3BD5 Comment Length        0000 (0)\n+3BD7 Disk Start            0000 (0)\n+3BD9 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3BB4 Ext File Attributes   81A40000 (2175008768)\n+3BDB Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3BB8 Local Header Offset   00002F6E (12142)\n-3BBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3BDF Local Header Offset   00002F9C (12188)\n+3BE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3BBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3BE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3C0C CENTRAL HEADER #23    02014B50 (33639248)\n-3C10 Created Zip Spec      14 (20) '2.0'\n-3C11 Created OS            03 (3) 'Unix'\n-3C12 Extract Zip Spec      14 (20) '2.0'\n-3C13 Extract OS            00 (0) 'MS-DOS'\n-3C14 General Purpose Flag  0800 (2048)\n+3C33 CENTRAL HEADER #23    02014B50 (33639248)\n+3C37 Created Zip Spec      14 (20) '2.0'\n+3C38 Created OS            03 (3) 'Unix'\n+3C39 Extract Zip Spec      14 (20) '2.0'\n+3C3A Extract OS            00 (0) 'MS-DOS'\n+3C3B General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3C16 Compression Method    0008 (8) 'Deflated'\n-3C18 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3C1C CRC                   E3551669 (3814004329)\n-3C20 Compressed Size       000003C6 (966)\n-3C24 Uncompressed Size     00000B49 (2889)\n-3C28 Filename Length       003F (63)\n-3C2A Extra Length          0000 (0)\n-3C2C Comment Length        0000 (0)\n-3C2E Disk Start            0000 (0)\n-3C30 Int File Attributes   0000 (0)\n+3C3D Compression Method    0008 (8) 'Deflated'\n+3C3F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3C43 CRC                   6A4E29DE (1783507422)\n+3C47 Compressed Size       000003BF (959)\n+3C4B Uncompressed Size     00000AFE (2814)\n+3C4F Filename Length       003F (63)\n+3C51 Extra Length          0000 (0)\n+3C53 Comment Length        0000 (0)\n+3C55 Disk Start            0000 (0)\n+3C57 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3C32 Ext File Attributes   81A40000 (2175008768)\n+3C59 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3C36 Local Header Offset   00003021 (12321)\n-3C3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3C5D Local Header Offset   0000304F (12367)\n+3C61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3C3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3C61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3C79 CENTRAL HEADER #24    02014B50 (33639248)\n-3C7D Created Zip Spec      14 (20) '2.0'\n-3C7E Created OS            03 (3) 'Unix'\n-3C7F Extract Zip Spec      14 (20) '2.0'\n-3C80 Extract OS            00 (0) 'MS-DOS'\n-3C81 General Purpose Flag  0800 (2048)\n+3CA0 CENTRAL HEADER #24    02014B50 (33639248)\n+3CA4 Created Zip Spec      14 (20) '2.0'\n+3CA5 Created OS            03 (3) 'Unix'\n+3CA6 Extract Zip Spec      14 (20) '2.0'\n+3CA7 Extract OS            00 (0) 'MS-DOS'\n+3CA8 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3C83 Compression Method    0008 (8) 'Deflated'\n-3C85 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3C89 CRC                   7158BA85 (1901640325)\n-3C8D Compressed Size       0000004C (76)\n-3C91 Uncompressed Size     0000004E (78)\n-3C95 Filename Length       0046 (70)\n-3C97 Extra Length          0000 (0)\n-3C99 Comment Length        0000 (0)\n-3C9B Disk Start            0000 (0)\n-3C9D Int File Attributes   0000 (0)\n+3CAA Compression Method    0008 (8) 'Deflated'\n+3CAC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3CB0 CRC                   7158BA85 (1901640325)\n+3CB4 Compressed Size       0000004C (76)\n+3CB8 Uncompressed Size     0000004E (78)\n+3CBC Filename Length       0046 (70)\n+3CBE Extra Length          0000 (0)\n+3CC0 Comment Length        0000 (0)\n+3CC2 Disk Start            0000 (0)\n+3CC4 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3C9F Ext File Attributes   81A40000 (2175008768)\n+3CC6 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3CA3 Local Header Offset   00003444 (13380)\n-3CA7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3CCA Local Header Offset   0000346B (13419)\n+3CCE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3CA7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3CCE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3CED END CENTRAL HEADER    06054B50 (101010256)\n-3CF1 Number of this disk   0000 (0)\n-3CF3 Central Dir Disk no   0000 (0)\n-3CF5 Entries in this disk  0018 (24)\n-3CF7 Total Entries         0018 (24)\n-3CF9 Size of Central Dir   000007F9 (2041)\n-3CFD Offset to Central Dir 000034F4 (13556)\n-3D01 Comment Length        0000 (0)\n+3D14 END CENTRAL HEADER    06054B50 (101010256)\n+3D18 Number of this disk   0000 (0)\n+3D1A Central Dir Disk no   0000 (0)\n+3D1C Entries in this disk  0018 (24)\n+3D1E Total Entries         0018 (24)\n+3D20 Size of Central Dir   000007F9 (2041)\n+3D24 Offset to Central Dir 0000351B (13595)\n+3D28 Comment Length        0000 (0)\n #\n # Error Count: 11\n # Warning Count: 59\n #\n # Done\n"}, {"source1": "org/apache/dubbo/registry/multiple/MultipleRegistry.java", "source2": "org/apache/dubbo/registry/multiple/MultipleRegistry.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,337 +1,337 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.registry.multiple;\n-\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.constants.CommonConstants;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.registry.NotifyListener;\n-import org.apache.dubbo.registry.Registry;\n-import org.apache.dubbo.registry.RegistryFactory;\n-import org.apache.dubbo.registry.support.AbstractRegistry;\n-\n-import java.util.ArrayList;\n-import java.util.HashMap;\n-import java.util.HashSet;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.concurrent.ConcurrentHashMap;\n-\n-import static org.apache.dubbo.common.constants.RegistryConstants.EMPTY_PROTOCOL;\n-\n-/**\n- * MultipleRegistry\n- */\n-public class MultipleRegistry extends AbstractRegistry {\n-\n-    public static final String REGISTRY_FOR_SERVICE = \"service-registry\";\n-    public static final String REGISTRY_FOR_REFERENCE = \"reference-registry\";\n-\n-    protected RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();\n-    private final Map<String, Registry> serviceRegistries = new ConcurrentHashMap<>(4);\n-    private final Map<String, Registry> referenceRegistries = new ConcurrentHashMap<String, Registry>(4);\n-    private final Map<NotifyListener, MultipleNotifyListenerWrapper> multipleNotifyListenerMap = new ConcurrentHashMap<NotifyListener, MultipleNotifyListenerWrapper>(32);\n-    protected List<String> origServiceRegistryURLs;\n-    protected List<String> origReferenceRegistryURLs;\n-    protected List<String> effectServiceRegistryURLs;\n-    protected List<String> effectReferenceRegistryURLs;\n-    private URL registryUrl;\n-    private String applicationName;\n-\n-    public MultipleRegistry(URL url) {\n-        this(url, true, true);\n-\n-        boolean defaultRegistry = url.getParameter(CommonConstants.DEFAULT_KEY, true);\n-        if (defaultRegistry && effectServiceRegistryURLs.isEmpty() && effectReferenceRegistryURLs.isEmpty()) {\n-            throw new IllegalArgumentException(\"Illegal registry url. You need to configure parameter \" +\n-                    REGISTRY_FOR_SERVICE + \" or \" + REGISTRY_FOR_REFERENCE);\n-        }\n-    }\n-\n-    public MultipleRegistry(URL url, boolean initServiceRegistry, boolean initReferenceRegistry) {\n-        super(url);\n-        this.registryUrl = url;\n-        this.applicationName = url.getParameter(CommonConstants.APPLICATION_KEY);\n-        init();\n-        checkApplicationName(this.applicationName);\n-        // This urls contain parameter and it do not inherit from the parameter of url in MultipleRegistry\n-\n-        Map<String, Registry> registryMap = new HashMap<>();\n-        if (initServiceRegistry) {\n-            initServiceRegistry(url, registryMap);\n-        }\n-        if (initReferenceRegistry) {\n-            initReferenceRegistry(url, registryMap);\n-        }\n-    }\n-\n-    protected void initServiceRegistry(URL url, Map<String, Registry> registryMap) {\n-        origServiceRegistryURLs = url.getParameter(REGISTRY_FOR_SERVICE, new ArrayList<String>());\n-        effectServiceRegistryURLs = this.filterServiceRegistry(origServiceRegistryURLs);\n-        for (String tmpUrl : effectServiceRegistryURLs) {\n-            if (registryMap.get(tmpUrl) != null) {\n-                serviceRegistries.put(tmpUrl, registryMap.get(tmpUrl));\n-                continue;\n-            }\n-            Registry registry = registryFactory.getRegistry(URL.valueOf(tmpUrl));\n-            registryMap.put(tmpUrl, registry);\n-            serviceRegistries.put(tmpUrl, registry);\n-        }\n-    }\n-\n-    protected void initReferenceRegistry(URL url, Map<String, Registry> registryMap) {\n-        origReferenceRegistryURLs = url.getParameter(REGISTRY_FOR_REFERENCE, new ArrayList<String>());\n-        effectReferenceRegistryURLs = this.filterReferenceRegistry(origReferenceRegistryURLs);\n-        for (String tmpUrl : effectReferenceRegistryURLs) {\n-            if (registryMap.get(tmpUrl) != null) {\n-                referenceRegistries.put(tmpUrl, registryMap.get(tmpUrl));\n-                continue;\n-            }\n-            Registry registry = registryFactory.getRegistry(URL.valueOf(tmpUrl));\n-            registryMap.put(tmpUrl, registry);\n-            referenceRegistries.put(tmpUrl, registry);\n-        }\n-    }\n-\n-\n-    @Override\n-    public URL getUrl() {\n-        return registryUrl;\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        boolean available = serviceRegistries.isEmpty();\n-        for (Registry serviceRegistry : serviceRegistries.values()) {\n-            if (serviceRegistry.isAvailable()) {\n-                available = true;\n-            }\n-        }\n-        if (!available) {\n-            return false;\n-        }\n-\n-        available = referenceRegistries.isEmpty();\n-        for (Registry referenceRegistry : referenceRegistries.values()) {\n-            if (referenceRegistry.isAvailable()) {\n-                available = true;\n-            }\n-        }\n-        if (!available) {\n-            return false;\n-        }\n-        return true;\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        Set<Registry> registries = new HashSet<Registry>(serviceRegistries.values());\n-        registries.addAll(referenceRegistries.values());\n-        for (Registry registry : registries) {\n-            registry.destroy();\n-        }\n-    }\n-\n-    @Override\n-    public void register(URL url) {\n-        super.register(url);\n-        for (Registry registry : serviceRegistries.values()) {\n-            registry.register(url);\n-        }\n-    }\n-\n-    @Override\n-    public void unregister(URL url) {\n-        super.unregister(url);\n-        for (Registry registry : serviceRegistries.values()) {\n-            registry.unregister(url);\n-        }\n-    }\n-\n-    @Override\n-    public void subscribe(URL url, NotifyListener listener) {\n-        MultipleNotifyListenerWrapper multipleNotifyListenerWrapper = new MultipleNotifyListenerWrapper(listener);\n-        multipleNotifyListenerMap.put(listener, multipleNotifyListenerWrapper);\n-        for (Registry registry : referenceRegistries.values()) {\n-            SingleNotifyListener singleNotifyListener = new SingleNotifyListener(multipleNotifyListenerWrapper, registry);\n-            multipleNotifyListenerWrapper.putRegistryMap(registry.getUrl(), singleNotifyListener);\n-            registry.subscribe(url, singleNotifyListener);\n-        }\n-        super.subscribe(url, multipleNotifyListenerWrapper);\n-    }\n-\n-    @Override\n-    public void unsubscribe(URL url, NotifyListener listener) {\n-        MultipleNotifyListenerWrapper notifyListener = multipleNotifyListenerMap.remove(listener);\n-        for (Registry registry : referenceRegistries.values()) {\n-            SingleNotifyListener singleNotifyListener = notifyListener.registryMap.get(registry.getUrl());\n-            registry.unsubscribe(url, singleNotifyListener);\n-        }\n-\n-        if (notifyListener != null) {\n-            super.unsubscribe(url, notifyListener);\n-            notifyListener.destroy();\n-        }\n-    }\n-\n-    @Override\n-    public List<URL> lookup(URL url) {\n-        List<URL> urls = new ArrayList<URL>();\n-        for (Registry registry : referenceRegistries.values()) {\n-            List<URL> tmpUrls = registry.lookup(url);\n-            if (!CollectionUtils.isEmpty(tmpUrls)) {\n-                urls.addAll(tmpUrls);\n-            }\n-        }\n-        return urls;\n-    }\n-\n-    protected void init() {\n-    }\n-\n-    protected List<String> filterServiceRegistry(List<String> serviceRegistryURLs) {\n-        return serviceRegistryURLs;\n-    }\n-\n-    protected List<String> filterReferenceRegistry(List<String> referenceRegistryURLs) {\n-        return referenceRegistryURLs;\n-    }\n-\n-\n-    protected void checkApplicationName(String applicationName) {\n-    }\n-\n-    protected String getApplicationName() {\n-        return applicationName;\n-    }\n-\n-    public Map<String, Registry> getServiceRegistries() {\n-        return serviceRegistries;\n-    }\n-\n-    public Map<String, Registry> getReferenceRegistries() {\n-        return referenceRegistries;\n-    }\n-\n-    public List<String> getOrigServiceRegistryURLs() {\n-        return origServiceRegistryURLs;\n-    }\n-\n-    public List<String> getOrigReferenceRegistryURLs() {\n-        return origReferenceRegistryURLs;\n-    }\n-\n-    public List<String> getEffectServiceRegistryURLs() {\n-        return effectServiceRegistryURLs;\n-    }\n-\n-    public List<String> getEffectReferenceRegistryURLs() {\n-        return effectReferenceRegistryURLs;\n-    }\n-\n-    static protected class MultipleNotifyListenerWrapper implements NotifyListener {\n-\n-        Map<URL, SingleNotifyListener> registryMap = new ConcurrentHashMap<URL, SingleNotifyListener>(4);\n-        NotifyListener sourceNotifyListener;\n-\n-        public MultipleNotifyListenerWrapper(NotifyListener sourceNotifyListener) {\n-            this.sourceNotifyListener = sourceNotifyListener;\n-        }\n-\n-        public void putRegistryMap(URL registryURL, SingleNotifyListener singleNotifyListener) {\n-            this.registryMap.put(registryURL, singleNotifyListener);\n-        }\n-\n-        public void destroy() {\n-            for (SingleNotifyListener singleNotifyListener : registryMap.values()) {\n-                if (singleNotifyListener != null) {\n-                    singleNotifyListener.destroy();\n-                }\n-            }\n-            registryMap.clear();\n-            sourceNotifyListener = null;\n-        }\n-\n-        public synchronized void notifySourceListener() {\n-            List<URL> notifyURLs = new ArrayList<URL>();\n-            URL emptyURL = null;\n-            for (SingleNotifyListener singleNotifyListener : registryMap.values()) {\n-                List<URL> tmpUrls = singleNotifyListener.getUrlList();\n-                if (CollectionUtils.isEmpty(tmpUrls)) {\n-                    continue;\n-                }\n-                // empty protocol\n-                if (tmpUrls.size() == 1\n-                        && tmpUrls.get(0) != null\n-                        && EMPTY_PROTOCOL.equals(tmpUrls.get(0).getProtocol())) {\n-                    // if only one empty\n-                    if (emptyURL == null) {\n-                        emptyURL = tmpUrls.get(0);\n-                    }\n-                    continue;\n-                }\n-                notifyURLs.addAll(tmpUrls);\n-            }\n-            // if no notify URL, add empty protocol URL\n-            if (emptyURL != null && notifyURLs.isEmpty()) {\n-                notifyURLs.add(emptyURL);\n-            }\n-            this.notify(notifyURLs);\n-        }\n-\n-        @Override\n-        public void notify(List<URL> urls) {\n-            sourceNotifyListener.notify(urls);\n-        }\n-\n-        public Map<URL, SingleNotifyListener> getRegistryMap() {\n-            return registryMap;\n-        }\n-    }\n-\n-    static protected class SingleNotifyListener implements NotifyListener {\n-\n-        MultipleNotifyListenerWrapper multipleNotifyListenerWrapper;\n-        Registry registry;\n-        volatile List<URL> urlList;\n-\n-        public SingleNotifyListener(MultipleNotifyListenerWrapper multipleNotifyListenerWrapper, Registry registry) {\n-            this.registry = registry;\n-            this.multipleNotifyListenerWrapper = multipleNotifyListenerWrapper;\n-        }\n-\n-        @Override\n-        public synchronized void notify(List<URL> urls) {\n-            this.urlList = urls;\n-            if (multipleNotifyListenerWrapper != null) {\n-                this.multipleNotifyListenerWrapper.notifySourceListener();\n-            }\n-        }\n-\n-        public void destroy() {\n-            this.multipleNotifyListenerWrapper = null;\n-            this.registry = null;\n-        }\n-\n-        public List<URL> getUrlList() {\n-            return urlList;\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.registry.multiple;\r\n+\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.constants.CommonConstants;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.registry.NotifyListener;\r\n+import org.apache.dubbo.registry.Registry;\r\n+import org.apache.dubbo.registry.RegistryFactory;\r\n+import org.apache.dubbo.registry.support.AbstractRegistry;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.HashMap;\r\n+import java.util.HashSet;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.EMPTY_PROTOCOL;\r\n+\r\n+/**\r\n+ * MultipleRegistry\r\n+ */\r\n+public class MultipleRegistry extends AbstractRegistry {\r\n+\r\n+    public static final String REGISTRY_FOR_SERVICE = \"service-registry\";\r\n+    public static final String REGISTRY_FOR_REFERENCE = \"reference-registry\";\r\n+\r\n+    protected RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();\r\n+    private final Map<String, Registry> serviceRegistries = new ConcurrentHashMap<>(4);\r\n+    private final Map<String, Registry> referenceRegistries = new ConcurrentHashMap<String, Registry>(4);\r\n+    private final Map<NotifyListener, MultipleNotifyListenerWrapper> multipleNotifyListenerMap = new ConcurrentHashMap<NotifyListener, MultipleNotifyListenerWrapper>(32);\r\n+    protected List<String> origServiceRegistryURLs;\r\n+    protected List<String> origReferenceRegistryURLs;\r\n+    protected List<String> effectServiceRegistryURLs;\r\n+    protected List<String> effectReferenceRegistryURLs;\r\n+    private URL registryUrl;\r\n+    private String applicationName;\r\n+\r\n+    public MultipleRegistry(URL url) {\r\n+        this(url, true, true);\r\n+\r\n+        boolean defaultRegistry = url.getParameter(CommonConstants.DEFAULT_KEY, true);\r\n+        if (defaultRegistry && effectServiceRegistryURLs.isEmpty() && effectReferenceRegistryURLs.isEmpty()) {\r\n+            throw new IllegalArgumentException(\"Illegal registry url. You need to configure parameter \" +\r\n+                    REGISTRY_FOR_SERVICE + \" or \" + REGISTRY_FOR_REFERENCE);\r\n+        }\r\n+    }\r\n+\r\n+    public MultipleRegistry(URL url, boolean initServiceRegistry, boolean initReferenceRegistry) {\r\n+        super(url);\r\n+        this.registryUrl = url;\r\n+        this.applicationName = url.getParameter(CommonConstants.APPLICATION_KEY);\r\n+        init();\r\n+        checkApplicationName(this.applicationName);\r\n+        // This urls contain parameter and it do not inherit from the parameter of url in MultipleRegistry\r\n+\r\n+        Map<String, Registry> registryMap = new HashMap<>();\r\n+        if (initServiceRegistry) {\r\n+            initServiceRegistry(url, registryMap);\r\n+        }\r\n+        if (initReferenceRegistry) {\r\n+            initReferenceRegistry(url, registryMap);\r\n+        }\r\n+    }\r\n+\r\n+    protected void initServiceRegistry(URL url, Map<String, Registry> registryMap) {\r\n+        origServiceRegistryURLs = url.getParameter(REGISTRY_FOR_SERVICE, new ArrayList<String>());\r\n+        effectServiceRegistryURLs = this.filterServiceRegistry(origServiceRegistryURLs);\r\n+        for (String tmpUrl : effectServiceRegistryURLs) {\r\n+            if (registryMap.get(tmpUrl) != null) {\r\n+                serviceRegistries.put(tmpUrl, registryMap.get(tmpUrl));\r\n+                continue;\r\n+            }\r\n+            Registry registry = registryFactory.getRegistry(URL.valueOf(tmpUrl));\r\n+            registryMap.put(tmpUrl, registry);\r\n+            serviceRegistries.put(tmpUrl, registry);\r\n+        }\r\n+    }\r\n+\r\n+    protected void initReferenceRegistry(URL url, Map<String, Registry> registryMap) {\r\n+        origReferenceRegistryURLs = url.getParameter(REGISTRY_FOR_REFERENCE, new ArrayList<String>());\r\n+        effectReferenceRegistryURLs = this.filterReferenceRegistry(origReferenceRegistryURLs);\r\n+        for (String tmpUrl : effectReferenceRegistryURLs) {\r\n+            if (registryMap.get(tmpUrl) != null) {\r\n+                referenceRegistries.put(tmpUrl, registryMap.get(tmpUrl));\r\n+                continue;\r\n+            }\r\n+            Registry registry = registryFactory.getRegistry(URL.valueOf(tmpUrl));\r\n+            registryMap.put(tmpUrl, registry);\r\n+            referenceRegistries.put(tmpUrl, registry);\r\n+        }\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public URL getUrl() {\r\n+        return registryUrl;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        boolean available = serviceRegistries.isEmpty();\r\n+        for (Registry serviceRegistry : serviceRegistries.values()) {\r\n+            if (serviceRegistry.isAvailable()) {\r\n+                available = true;\r\n+            }\r\n+        }\r\n+        if (!available) {\r\n+            return false;\r\n+        }\r\n+\r\n+        available = referenceRegistries.isEmpty();\r\n+        for (Registry referenceRegistry : referenceRegistries.values()) {\r\n+            if (referenceRegistry.isAvailable()) {\r\n+                available = true;\r\n+            }\r\n+        }\r\n+        if (!available) {\r\n+            return false;\r\n+        }\r\n+        return true;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        Set<Registry> registries = new HashSet<Registry>(serviceRegistries.values());\r\n+        registries.addAll(referenceRegistries.values());\r\n+        for (Registry registry : registries) {\r\n+            registry.destroy();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void register(URL url) {\r\n+        super.register(url);\r\n+        for (Registry registry : serviceRegistries.values()) {\r\n+            registry.register(url);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void unregister(URL url) {\r\n+        super.unregister(url);\r\n+        for (Registry registry : serviceRegistries.values()) {\r\n+            registry.unregister(url);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void subscribe(URL url, NotifyListener listener) {\r\n+        MultipleNotifyListenerWrapper multipleNotifyListenerWrapper = new MultipleNotifyListenerWrapper(listener);\r\n+        multipleNotifyListenerMap.put(listener, multipleNotifyListenerWrapper);\r\n+        for (Registry registry : referenceRegistries.values()) {\r\n+            SingleNotifyListener singleNotifyListener = new SingleNotifyListener(multipleNotifyListenerWrapper, registry);\r\n+            multipleNotifyListenerWrapper.putRegistryMap(registry.getUrl(), singleNotifyListener);\r\n+            registry.subscribe(url, singleNotifyListener);\r\n+        }\r\n+        super.subscribe(url, multipleNotifyListenerWrapper);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void unsubscribe(URL url, NotifyListener listener) {\r\n+        MultipleNotifyListenerWrapper notifyListener = multipleNotifyListenerMap.remove(listener);\r\n+        for (Registry registry : referenceRegistries.values()) {\r\n+            SingleNotifyListener singleNotifyListener = notifyListener.registryMap.get(registry.getUrl());\r\n+            registry.unsubscribe(url, singleNotifyListener);\r\n+        }\r\n+\r\n+        if (notifyListener != null) {\r\n+            super.unsubscribe(url, notifyListener);\r\n+            notifyListener.destroy();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<URL> lookup(URL url) {\r\n+        List<URL> urls = new ArrayList<URL>();\r\n+        for (Registry registry : referenceRegistries.values()) {\r\n+            List<URL> tmpUrls = registry.lookup(url);\r\n+            if (!CollectionUtils.isEmpty(tmpUrls)) {\r\n+                urls.addAll(tmpUrls);\r\n+            }\r\n+        }\r\n+        return urls;\r\n+    }\r\n+\r\n+    protected void init() {\r\n+    }\r\n+\r\n+    protected List<String> filterServiceRegistry(List<String> serviceRegistryURLs) {\r\n+        return serviceRegistryURLs;\r\n+    }\r\n+\r\n+    protected List<String> filterReferenceRegistry(List<String> referenceRegistryURLs) {\r\n+        return referenceRegistryURLs;\r\n+    }\r\n+\r\n+\r\n+    protected void checkApplicationName(String applicationName) {\r\n+    }\r\n+\r\n+    protected String getApplicationName() {\r\n+        return applicationName;\r\n+    }\r\n+\r\n+    public Map<String, Registry> getServiceRegistries() {\r\n+        return serviceRegistries;\r\n+    }\r\n+\r\n+    public Map<String, Registry> getReferenceRegistries() {\r\n+        return referenceRegistries;\r\n+    }\r\n+\r\n+    public List<String> getOrigServiceRegistryURLs() {\r\n+        return origServiceRegistryURLs;\r\n+    }\r\n+\r\n+    public List<String> getOrigReferenceRegistryURLs() {\r\n+        return origReferenceRegistryURLs;\r\n+    }\r\n+\r\n+    public List<String> getEffectServiceRegistryURLs() {\r\n+        return effectServiceRegistryURLs;\r\n+    }\r\n+\r\n+    public List<String> getEffectReferenceRegistryURLs() {\r\n+        return effectReferenceRegistryURLs;\r\n+    }\r\n+\r\n+    static protected class MultipleNotifyListenerWrapper implements NotifyListener {\r\n+\r\n+        Map<URL, SingleNotifyListener> registryMap = new ConcurrentHashMap<URL, SingleNotifyListener>(4);\r\n+        NotifyListener sourceNotifyListener;\r\n+\r\n+        public MultipleNotifyListenerWrapper(NotifyListener sourceNotifyListener) {\r\n+            this.sourceNotifyListener = sourceNotifyListener;\r\n+        }\r\n+\r\n+        public void putRegistryMap(URL registryURL, SingleNotifyListener singleNotifyListener) {\r\n+            this.registryMap.put(registryURL, singleNotifyListener);\r\n+        }\r\n+\r\n+        public void destroy() {\r\n+            for (SingleNotifyListener singleNotifyListener : registryMap.values()) {\r\n+                if (singleNotifyListener != null) {\r\n+                    singleNotifyListener.destroy();\r\n+                }\r\n+            }\r\n+            registryMap.clear();\r\n+            sourceNotifyListener = null;\r\n+        }\r\n+\r\n+        public synchronized void notifySourceListener() {\r\n+            List<URL> notifyURLs = new ArrayList<URL>();\r\n+            URL emptyURL = null;\r\n+            for (SingleNotifyListener singleNotifyListener : registryMap.values()) {\r\n+                List<URL> tmpUrls = singleNotifyListener.getUrlList();\r\n+                if (CollectionUtils.isEmpty(tmpUrls)) {\r\n+                    continue;\r\n+                }\r\n+                // empty protocol\r\n+                if (tmpUrls.size() == 1\r\n+                        && tmpUrls.get(0) != null\r\n+                        && EMPTY_PROTOCOL.equals(tmpUrls.get(0).getProtocol())) {\r\n+                    // if only one empty\r\n+                    if (emptyURL == null) {\r\n+                        emptyURL = tmpUrls.get(0);\r\n+                    }\r\n+                    continue;\r\n+                }\r\n+                notifyURLs.addAll(tmpUrls);\r\n+            }\r\n+            // if no notify URL, add empty protocol URL\r\n+            if (emptyURL != null && notifyURLs.isEmpty()) {\r\n+                notifyURLs.add(emptyURL);\r\n+            }\r\n+            this.notify(notifyURLs);\r\n+        }\r\n+\r\n+        @Override\r\n+        public void notify(List<URL> urls) {\r\n+            sourceNotifyListener.notify(urls);\r\n+        }\r\n+\r\n+        public Map<URL, SingleNotifyListener> getRegistryMap() {\r\n+            return registryMap;\r\n+        }\r\n+    }\r\n+\r\n+    static protected class SingleNotifyListener implements NotifyListener {\r\n+\r\n+        MultipleNotifyListenerWrapper multipleNotifyListenerWrapper;\r\n+        Registry registry;\r\n+        volatile List<URL> urlList;\r\n+\r\n+        public SingleNotifyListener(MultipleNotifyListenerWrapper multipleNotifyListenerWrapper, Registry registry) {\r\n+            this.registry = registry;\r\n+            this.multipleNotifyListenerWrapper = multipleNotifyListenerWrapper;\r\n+        }\r\n+\r\n+        @Override\r\n+        public synchronized void notify(List<URL> urls) {\r\n+            this.urlList = urls;\r\n+            if (multipleNotifyListenerWrapper != null) {\r\n+                this.multipleNotifyListenerWrapper.notifySourceListener();\r\n+            }\r\n+        }\r\n+\r\n+        public void destroy() {\r\n+            this.multipleNotifyListenerWrapper = null;\r\n+            this.registry = null;\r\n+        }\r\n+\r\n+        public List<URL> getUrlList() {\r\n+            return urlList;\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/multiple/MultipleRegistryFactory.java", "source2": "org/apache/dubbo/registry/multiple/MultipleRegistryFactory.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,33 +1,33 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.registry.multiple;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.registry.Registry;\n-import org.apache.dubbo.registry.support.AbstractRegistryFactory;\n-\n-/**\n- * MultipleRegistryFactory\n- */\n-public class MultipleRegistryFactory extends AbstractRegistryFactory {\n-\n-    @Override\n-    protected Registry createRegistry(URL url) {\n-        return new MultipleRegistry(url);\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.registry.multiple;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.registry.Registry;\r\n+import org.apache.dubbo.registry.support.AbstractRegistryFactory;\r\n+\r\n+/**\r\n+ * MultipleRegistryFactory\r\n+ */\r\n+public class MultipleRegistryFactory extends AbstractRegistryFactory {\r\n+\r\n+    @Override\r\n+    protected Registry createRegistry(URL url) {\r\n+        return new MultipleRegistry(url);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/multiple/MultipleRegistryServiceDiscovery.java", "source2": "org/apache/dubbo/registry/multiple/MultipleRegistryServiceDiscovery.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,171 +1,171 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.registry.multiple;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.constants.CommonConstants;\n-import org.apache.dubbo.common.utils.DefaultPage;\n-import org.apache.dubbo.common.utils.Page;\n-import org.apache.dubbo.event.ConditionalEventListener;\n-import org.apache.dubbo.registry.client.AbstractServiceDiscovery;\n-import org.apache.dubbo.registry.client.ServiceDiscovery;\n-import org.apache.dubbo.registry.client.ServiceDiscoveryFactory;\n-import org.apache.dubbo.registry.client.ServiceInstance;\n-import org.apache.dubbo.registry.client.event.ServiceInstancesChangedEvent;\n-import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;\n-\n-import java.util.ArrayList;\n-import java.util.HashSet;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.concurrent.ConcurrentHashMap;\n-\n-public class MultipleRegistryServiceDiscovery extends AbstractServiceDiscovery {\n-    public static final String REGISTRY_PREFIX_KEY = \"child.\";\n-    private final Map<String, ServiceDiscovery> serviceDiscoveries = new ConcurrentHashMap<>();\n-    private URL registryURL;\n-    private String applicationName;\n-\n-    @Override\n-    public void initialize(URL registryURL) throws Exception {\n-        this.registryURL = registryURL;\n-        this.applicationName = registryURL.getParameter(CommonConstants.APPLICATION_KEY);\n-\n-        Map<String, String> parameters = registryURL.getParameters();\n-        for (String key : parameters.keySet()) {\n-            if (key.startsWith(REGISTRY_PREFIX_KEY)) {\n-                URL url = URL.valueOf(registryURL.getParameter(key)).addParameter(CommonConstants.APPLICATION_KEY, applicationName)\n-                        .addParameter(\"registry-type\", \"service\");\n-                ServiceDiscovery serviceDiscovery = ServiceDiscoveryFactory.getExtension(url).getServiceDiscovery(url);\n-                serviceDiscovery.initialize(url);\n-                serviceDiscoveries.put(key, serviceDiscovery);\n-            }\n-        }\n-    }\n-\n-    @Override\n-    public URL getUrl() {\n-        return registryURL;\n-    }\n-\n-    @Override\n-    public void destroy() throws Exception {\n-        for (ServiceDiscovery serviceDiscovery : serviceDiscoveries.values()) {\n-            serviceDiscovery.destroy();\n-        }\n-    }\n-\n-    @Override\n-    public void doRegister(ServiceInstance serviceInstance) {\n-        serviceDiscoveries.values().forEach(serviceDiscovery -> serviceDiscovery.register(serviceInstance));\n-    }\n-\n-    @Override\n-    public void doUpdate(ServiceInstance serviceInstance) {\n-        serviceDiscoveries.values().forEach(serviceDiscovery -> serviceDiscovery.update(serviceInstance));\n-    }\n-\n-    @Override\n-    public void unregister(ServiceInstance serviceInstance) throws RuntimeException {\n-        serviceDiscoveries.values().forEach(serviceDiscovery -> serviceDiscovery.unregister(serviceInstance));\n-    }\n-\n-    @Override\n-    public void addServiceInstancesChangedListener(ServiceInstancesChangedListener listener) throws NullPointerException, IllegalArgumentException {\n-        MultiServiceInstancesChangedListener multiListener = new MultiServiceInstancesChangedListener(listener);\n-\n-        for (String registryKey : serviceDiscoveries.keySet()) {\n-            SingleServiceInstancesChangedListener singleListener = new SingleServiceInstancesChangedListener(listener.getServiceNames(), serviceDiscoveries.get(registryKey), multiListener);\n-            multiListener.putSingleListener(registryKey, singleListener);\n-            serviceDiscoveries.get(registryKey).addServiceInstancesChangedListener(singleListener);\n-        }\n-    }\n-\n-    @Override\n-    public Page<ServiceInstance> getInstances(String serviceName, int offset, int pageSize, boolean healthyOnly) throws NullPointerException, IllegalArgumentException, UnsupportedOperationException {\n-\n-        List<ServiceInstance> serviceInstanceList = new ArrayList<>();\n-        for (ServiceDiscovery serviceDiscovery : serviceDiscoveries.values()) {\n-            Page<ServiceInstance> serviceInstancePage = serviceDiscovery.getInstances(serviceName, offset, pageSize, healthyOnly);\n-            serviceInstanceList.addAll(serviceInstancePage.getData());\n-        }\n-\n-        return new DefaultPage<>(offset, pageSize, serviceInstanceList, serviceInstanceList.size());\n-    }\n-\n-    @Override\n-    public Set<String> getServices() {\n-        Set<String> services = new HashSet<>();\n-        for (ServiceDiscovery serviceDiscovery : serviceDiscoveries.values()) {\n-            services.addAll(serviceDiscovery.getServices());\n-        }\n-        return services;\n-    }\n-\n-    protected static class MultiServiceInstancesChangedListener implements ConditionalEventListener<ServiceInstancesChangedEvent> {\n-        private final ServiceInstancesChangedListener sourceListener;\n-        private final Map<String, SingleServiceInstancesChangedListener> singleListenerMap = new ConcurrentHashMap<>();\n-\n-        public MultiServiceInstancesChangedListener(ServiceInstancesChangedListener sourceListener) {\n-            this.sourceListener = sourceListener;\n-        }\n-\n-        @Override\n-        public boolean accept(ServiceInstancesChangedEvent event) {\n-            return sourceListener.getServiceNames().contains(event.getServiceName());\n-        }\n-\n-        @Override\n-        public void onEvent(ServiceInstancesChangedEvent event) {\n-            List<ServiceInstance> serviceInstances = new ArrayList<>();\n-            for (SingleServiceInstancesChangedListener singleListener : singleListenerMap.values()) {\n-                if (null != singleListener.event && null != singleListener.event.getServiceInstances()) {\n-                    for (ServiceInstance serviceInstance : singleListener.event.getServiceInstances()) {\n-                        if (!serviceInstances.contains(serviceInstance)) {\n-                            serviceInstances.add(serviceInstance);\n-                        }\n-                    }\n-                }\n-            }\n-\n-            sourceListener.onEvent(new ServiceInstancesChangedEvent(event.getServiceName(), serviceInstances));\n-        }\n-\n-        public void putSingleListener(String registryKey, SingleServiceInstancesChangedListener singleListener) {\n-            singleListenerMap.put(registryKey, singleListener);\n-        }\n-    }\n-\n-    protected static class SingleServiceInstancesChangedListener extends ServiceInstancesChangedListener {\n-        private final MultiServiceInstancesChangedListener multiListener;\n-        volatile ServiceInstancesChangedEvent event;\n-\n-        public SingleServiceInstancesChangedListener(Set<String> serviceNames, ServiceDiscovery serviceDiscovery, MultiServiceInstancesChangedListener multiListener) {\n-            super(serviceNames, serviceDiscovery);\n-            this.multiListener = multiListener;\n-        }\n-\n-        @Override\n-        public void onEvent(ServiceInstancesChangedEvent event) {\n-            this.event = event;\n-            if (multiListener != null) {\n-                multiListener.onEvent(event);\n-            }\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.registry.multiple;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.constants.CommonConstants;\r\n+import org.apache.dubbo.common.utils.DefaultPage;\r\n+import org.apache.dubbo.common.utils.Page;\r\n+import org.apache.dubbo.event.ConditionalEventListener;\r\n+import org.apache.dubbo.registry.client.AbstractServiceDiscovery;\r\n+import org.apache.dubbo.registry.client.ServiceDiscovery;\r\n+import org.apache.dubbo.registry.client.ServiceDiscoveryFactory;\r\n+import org.apache.dubbo.registry.client.ServiceInstance;\r\n+import org.apache.dubbo.registry.client.event.ServiceInstancesChangedEvent;\r\n+import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.HashSet;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+\r\n+public class MultipleRegistryServiceDiscovery extends AbstractServiceDiscovery {\r\n+    public static final String REGISTRY_PREFIX_KEY = \"child.\";\r\n+    private final Map<String, ServiceDiscovery> serviceDiscoveries = new ConcurrentHashMap<>();\r\n+    private URL registryURL;\r\n+    private String applicationName;\r\n+\r\n+    @Override\r\n+    public void initialize(URL registryURL) throws Exception {\r\n+        this.registryURL = registryURL;\r\n+        this.applicationName = registryURL.getParameter(CommonConstants.APPLICATION_KEY);\r\n+\r\n+        Map<String, String> parameters = registryURL.getParameters();\r\n+        for (String key : parameters.keySet()) {\r\n+            if (key.startsWith(REGISTRY_PREFIX_KEY)) {\r\n+                URL url = URL.valueOf(registryURL.getParameter(key)).addParameter(CommonConstants.APPLICATION_KEY, applicationName)\r\n+                        .addParameter(\"registry-type\", \"service\");\r\n+                ServiceDiscovery serviceDiscovery = ServiceDiscoveryFactory.getExtension(url).getServiceDiscovery(url);\r\n+                serviceDiscovery.initialize(url);\r\n+                serviceDiscoveries.put(key, serviceDiscovery);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public URL getUrl() {\r\n+        return registryURL;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() throws Exception {\r\n+        for (ServiceDiscovery serviceDiscovery : serviceDiscoveries.values()) {\r\n+            serviceDiscovery.destroy();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doRegister(ServiceInstance serviceInstance) {\r\n+        serviceDiscoveries.values().forEach(serviceDiscovery -> serviceDiscovery.register(serviceInstance));\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doUpdate(ServiceInstance serviceInstance) {\r\n+        serviceDiscoveries.values().forEach(serviceDiscovery -> serviceDiscovery.update(serviceInstance));\r\n+    }\r\n+\r\n+    @Override\r\n+    public void unregister(ServiceInstance serviceInstance) throws RuntimeException {\r\n+        serviceDiscoveries.values().forEach(serviceDiscovery -> serviceDiscovery.unregister(serviceInstance));\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addServiceInstancesChangedListener(ServiceInstancesChangedListener listener) throws NullPointerException, IllegalArgumentException {\r\n+        MultiServiceInstancesChangedListener multiListener = new MultiServiceInstancesChangedListener(listener);\r\n+\r\n+        for (String registryKey : serviceDiscoveries.keySet()) {\r\n+            SingleServiceInstancesChangedListener singleListener = new SingleServiceInstancesChangedListener(listener.getServiceNames(), serviceDiscoveries.get(registryKey), multiListener);\r\n+            multiListener.putSingleListener(registryKey, singleListener);\r\n+            serviceDiscoveries.get(registryKey).addServiceInstancesChangedListener(singleListener);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public Page<ServiceInstance> getInstances(String serviceName, int offset, int pageSize, boolean healthyOnly) throws NullPointerException, IllegalArgumentException, UnsupportedOperationException {\r\n+\r\n+        List<ServiceInstance> serviceInstanceList = new ArrayList<>();\r\n+        for (ServiceDiscovery serviceDiscovery : serviceDiscoveries.values()) {\r\n+            Page<ServiceInstance> serviceInstancePage = serviceDiscovery.getInstances(serviceName, offset, pageSize, healthyOnly);\r\n+            serviceInstanceList.addAll(serviceInstancePage.getData());\r\n+        }\r\n+\r\n+        return new DefaultPage<>(offset, pageSize, serviceInstanceList, serviceInstanceList.size());\r\n+    }\r\n+\r\n+    @Override\r\n+    public Set<String> getServices() {\r\n+        Set<String> services = new HashSet<>();\r\n+        for (ServiceDiscovery serviceDiscovery : serviceDiscoveries.values()) {\r\n+            services.addAll(serviceDiscovery.getServices());\r\n+        }\r\n+        return services;\r\n+    }\r\n+\r\n+    protected static class MultiServiceInstancesChangedListener implements ConditionalEventListener<ServiceInstancesChangedEvent> {\r\n+        private final ServiceInstancesChangedListener sourceListener;\r\n+        private final Map<String, SingleServiceInstancesChangedListener> singleListenerMap = new ConcurrentHashMap<>();\r\n+\r\n+        public MultiServiceInstancesChangedListener(ServiceInstancesChangedListener sourceListener) {\r\n+            this.sourceListener = sourceListener;\r\n+        }\r\n+\r\n+        @Override\r\n+        public boolean accept(ServiceInstancesChangedEvent event) {\r\n+            return sourceListener.getServiceNames().contains(event.getServiceName());\r\n+        }\r\n+\r\n+        @Override\r\n+        public void onEvent(ServiceInstancesChangedEvent event) {\r\n+            List<ServiceInstance> serviceInstances = new ArrayList<>();\r\n+            for (SingleServiceInstancesChangedListener singleListener : singleListenerMap.values()) {\r\n+                if (null != singleListener.event && null != singleListener.event.getServiceInstances()) {\r\n+                    for (ServiceInstance serviceInstance : singleListener.event.getServiceInstances()) {\r\n+                        if (!serviceInstances.contains(serviceInstance)) {\r\n+                            serviceInstances.add(serviceInstance);\r\n+                        }\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            sourceListener.onEvent(new ServiceInstancesChangedEvent(event.getServiceName(), serviceInstances));\r\n+        }\r\n+\r\n+        public void putSingleListener(String registryKey, SingleServiceInstancesChangedListener singleListener) {\r\n+            singleListenerMap.put(registryKey, singleListener);\r\n+        }\r\n+    }\r\n+\r\n+    protected static class SingleServiceInstancesChangedListener extends ServiceInstancesChangedListener {\r\n+        private final MultiServiceInstancesChangedListener multiListener;\r\n+        volatile ServiceInstancesChangedEvent event;\r\n+\r\n+        public SingleServiceInstancesChangedListener(Set<String> serviceNames, ServiceDiscovery serviceDiscovery, MultiServiceInstancesChangedListener multiListener) {\r\n+            super(serviceNames, serviceDiscovery);\r\n+            this.multiListener = multiListener;\r\n+        }\r\n+\r\n+        @Override\r\n+        public void onEvent(ServiceInstancesChangedEvent event) {\r\n+            this.event = event;\r\n+            if (multiListener != null) {\r\n+                multiListener.onEvent(event);\r\n+            }\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/multiple/MultipleRegistryServiceDiscoveryFactory.java", "source2": "org/apache/dubbo/registry/multiple/MultipleRegistryServiceDiscoveryFactory.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,28 +1,28 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.registry.multiple;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.registry.client.AbstractServiceDiscoveryFactory;\n-import org.apache.dubbo.registry.client.ServiceDiscovery;\n-\n-public class MultipleRegistryServiceDiscoveryFactory extends AbstractServiceDiscoveryFactory  {\n-    @Override\n-    protected ServiceDiscovery createDiscovery(URL registryURL) {\n-        return new MultipleRegistryServiceDiscovery();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.registry.multiple;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.registry.client.AbstractServiceDiscoveryFactory;\r\n+import org.apache.dubbo.registry.client.ServiceDiscovery;\r\n+\r\n+public class MultipleRegistryServiceDiscoveryFactory extends AbstractServiceDiscoveryFactory  {\r\n+    @Override\r\n+    protected ServiceDiscovery createDiscovery(URL registryURL) {\r\n+        return new MultipleRegistryServiceDiscovery();\r\n+    }\r\n+}\r\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory", "source2": "META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory", "comments": ["Ordering differences only"], "unified_diff": "@@ -1 +1 @@\n-multiple=org.apache.dubbo.registry.multiple.MultipleRegistryFactory\n+multiple=org.apache.dubbo.registry.multiple.MultipleRegistryFactory\r\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-registry-multiple/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-registry-multiple/pom.xml", "comments": ["Format-specific differences are supported for XML files but no file-specific differences were detected; falling back to a binary diff. file(1) reports: XML 1.0 document, ASCII text, with CRLF line terminators"], "has_internal_linenos": true, "unified_diff": "@@ -1,181 +1,176 @@\n 00000000: 3c3f 786d 6c20 7665 7273 696f 6e3d 2231  <?xml version=\"1\n 00000010: 2e30 2220 656e 636f 6469 6e67 3d22 5554  .0\" encoding=\"UT\n-00000020: 462d 3822 3f3e 0d0a 3c21 2d2d 0d0a 2020  F-8\"?>..<!--..  \n-00000030: 4c69 6365 6e73 6564 2074 6f20 7468 6520  Licensed to the \n-00000040: 4170 6163 6865 2053 6f66 7477 6172 6520  Apache Software \n-00000050: 466f 756e 6461 7469 6f6e 2028 4153 4629  Foundation (ASF)\n-00000060: 2075 6e64 6572 206f 6e65 206f 7220 6d6f   under one or mo\n-00000070: 7265 0d0a 2020 636f 6e74 7269 6275 746f  re..  contributo\n-00000080: 7220 6c69 6365 6e73 6520 6167 7265 656d  r license agreem\n-00000090: 656e 7473 2e20 2053 6565 2074 6865 204e  ents.  See the N\n-000000a0: 4f54 4943 4520 6669 6c65 2064 6973 7472  OTICE file distr\n-000000b0: 6962 7574 6564 2077 6974 680d 0a20 2074  ibuted with..  t\n-000000c0: 6869 7320 776f 726b 2066 6f72 2061 6464  his work for add\n-000000d0: 6974 696f 6e61 6c20 696e 666f 726d 6174  itional informat\n-000000e0: 696f 6e20 7265 6761 7264 696e 6720 636f  ion regarding co\n-000000f0: 7079 7269 6768 7420 6f77 6e65 7273 6869  pyright ownershi\n-00000100: 702e 0d0a 2020 5468 6520 4153 4620 6c69  p...  The ASF li\n-00000110: 6365 6e73 6573 2074 6869 7320 6669 6c65  censes this file\n-00000120: 2074 6f20 596f 7520 756e 6465 7220 7468   to You under th\n-00000130: 6520 4170 6163 6865 204c 6963 656e 7365  e Apache License\n-00000140: 2c20 5665 7273 696f 6e20 322e 300d 0a20  , Version 2.0.. \n-00000150: 2028 7468 6520 224c 6963 656e 7365 2229   (the \"License\")\n-00000160: 3b20 796f 7520 6d61 7920 6e6f 7420 7573  ; you may not us\n-00000170: 6520 7468 6973 2066 696c 6520 6578 6365  e this file exce\n-00000180: 7074 2069 6e20 636f 6d70 6c69 616e 6365  pt in compliance\n-00000190: 2077 6974 680d 0a20 2074 6865 204c 6963   with..  the Lic\n-000001a0: 656e 7365 2e20 2059 6f75 206d 6179 206f  ense.  You may o\n-000001b0: 6274 6169 6e20 6120 636f 7079 206f 6620  btain a copy of \n-000001c0: 7468 6520 4c69 6365 6e73 6520 6174 0d0a  the License at..\n-000001d0: 0d0a 2020 2020 2020 6874 7470 3a2f 2f77  ..      http://w\n-000001e0: 7777 2e61 7061 6368 652e 6f72 672f 6c69  ww.apache.org/li\n-000001f0: 6365 6e73 6573 2f4c 4943 454e 5345 2d32  censes/LICENSE-2\n-00000200: 2e30 0d0a 0d0a 2020 556e 6c65 7373 2072  .0....  Unless r\n-00000210: 6571 7569 7265 6420 6279 2061 7070 6c69  equired by appli\n-00000220: 6361 626c 6520 6c61 7720 6f72 2061 6772  cable law or agr\n-00000230: 6565 6420 746f 2069 6e20 7772 6974 696e  eed to in writin\n-00000240: 672c 2073 6f66 7477 6172 650d 0a20 2064  g, software..  d\n-00000250: 6973 7472 6962 7574 6564 2075 6e64 6572  istributed under\n-00000260: 2074 6865 204c 6963 656e 7365 2069 7320   the License is \n-00000270: 6469 7374 7269 6275 7465 6420 6f6e 2061  distributed on a\n-00000280: 6e20 2241 5320 4953 2220 4241 5349 532c  n \"AS IS\" BASIS,\n-00000290: 0d0a 2020 5749 5448 4f55 5420 5741 5252  ..  WITHOUT WARR\n-000002a0: 414e 5449 4553 204f 5220 434f 4e44 4954  ANTIES OR CONDIT\n-000002b0: 494f 4e53 204f 4620 414e 5920 4b49 4e44  IONS OF ANY KIND\n-000002c0: 2c20 6569 7468 6572 2065 7870 7265 7373  , either express\n-000002d0: 206f 7220 696d 706c 6965 642e 0d0a 2020   or implied...  \n-000002e0: 5365 6520 7468 6520 4c69 6365 6e73 6520  See the License \n-000002f0: 666f 7220 7468 6520 7370 6563 6966 6963  for the specific\n-00000300: 206c 616e 6775 6167 6520 676f 7665 726e   language govern\n-00000310: 696e 6720 7065 726d 6973 7369 6f6e 7320  ing permissions \n-00000320: 616e 640d 0a20 206c 696d 6974 6174 696f  and..  limitatio\n-00000330: 6e73 2075 6e64 6572 2074 6865 204c 6963  ns under the Lic\n-00000340: 656e 7365 2e0d 0a20 202d 2d3e 0d0a 3c70  ense...  -->..<p\n-00000350: 726f 6a65 6374 2078 7369 3a73 6368 656d  roject xsi:schem\n-00000360: 614c 6f63 6174 696f 6e3d 2268 7474 703a  aLocation=\"http:\n-00000370: 2f2f 6d61 7665 6e2e 6170 6163 6865 2e6f  //maven.apache.o\n-00000380: 7267 2f50 4f4d 2f34 2e30 2e30 2068 7474  rg/POM/4.0.0 htt\n-00000390: 7073 3a2f 2f6d 6176 656e 2e61 7061 6368  ps://maven.apach\n-000003a0: 652e 6f72 672f 7873 642f 6d61 7665 6e2d  e.org/xsd/maven-\n-000003b0: 342e 302e 302e 7873 6422 2078 6d6c 6e73  4.0.0.xsd\" xmlns\n-000003c0: 3d22 6874 7470 3a2f 2f6d 6176 656e 2e61  =\"http://maven.a\n-000003d0: 7061 6368 652e 6f72 672f 504f 4d2f 342e  pache.org/POM/4.\n-000003e0: 302e 3022 0d0a 2020 2020 786d 6c6e 733a  0.0\"..    xmlns:\n-000003f0: 7873 693d 2268 7474 703a 2f2f 7777 772e  xsi=\"http://www.\n-00000400: 7733 2e6f 7267 2f32 3030 312f 584d 4c53  w3.org/2001/XMLS\n-00000410: 6368 656d 612d 696e 7374 616e 6365 223e  chema-instance\">\n-00000420: 0d0a 2020 3c6d 6f64 656c 5665 7273 696f  ..  <modelVersio\n-00000430: 6e3e 342e 302e 303c 2f6d 6f64 656c 5665  n>4.0.0</modelVe\n-00000440: 7273 696f 6e3e 0d0a 2020 3c70 6172 656e  rsion>..  <paren\n-00000450: 743e 0d0a 2020 2020 3c67 726f 7570 4964  t>..    <groupId\n-00000460: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n-00000470: 6f3c 2f67 726f 7570 4964 3e0d 0a20 2020  o</groupId>..   \n-00000480: 203c 6172 7469 6661 6374 4964 3e64 7562   <artifactId>dub\n-00000490: 626f 2d72 6567 6973 7472 793c 2f61 7274  bo-registry</art\n-000004a0: 6966 6163 7449 643e 0d0a 2020 2020 3c76  ifactId>..    <v\n-000004b0: 6572 7369 6f6e 3e32 2e37 2e31 303c 2f76  ersion>2.7.10</v\n-000004c0: 6572 7369 6f6e 3e0d 0a20 203c 2f70 6172  ersion>..  </par\n-000004d0: 656e 743e 0d0a 2020 3c67 726f 7570 4964  ent>..  <groupId\n-000004e0: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n-000004f0: 6f3c 2f67 726f 7570 4964 3e0d 0a20 203c  o</groupId>..  <\n-00000500: 6172 7469 6661 6374 4964 3e64 7562 626f  artifactId>dubbo\n-00000510: 2d72 6567 6973 7472 792d 6d75 6c74 6970  -registry-multip\n-00000520: 6c65 3c2f 6172 7469 6661 6374 4964 3e0d  le</artifactId>.\n-00000530: 0a20 203c 7665 7273 696f 6e3e 322e 372e  .  <version>2.7.\n-00000540: 3130 3c2f 7665 7273 696f 6e3e 0d0a 2020  10</version>..  \n-00000550: 3c6e 616d 653e 247b 7072 6f6a 6563 742e  <name>${project.\n-00000560: 6172 7469 6661 6374 4964 7d3c 2f6e 616d  artifactId}</nam\n-00000570: 653e 0d0a 2020 3c64 6573 6372 6970 7469  e>..  <descripti\n-00000580: 6f6e 3e54 6865 206d 756c 7469 706c 6520  on>The multiple \n-00000590: 7265 6769 7374 7279 206d 6f64 756c 6520  registry module \n-000005a0: 6f66 2064 7562 626f 2070 726f 6a65 6374  of dubbo project\n-000005b0: 3c2f 6465 7363 7269 7074 696f 6e3e 0d0a  </description>..\n-000005c0: 2020 3c6c 6963 656e 7365 733e 0d0a 2020    <licenses>..  \n-000005d0: 2020 3c6c 6963 656e 7365 3e0d 0a20 2020    <license>..   \n-000005e0: 2020 203c 6e61 6d65 3e41 7061 6368 6520     <name>Apache \n-000005f0: 4c69 6365 6e73 652c 2056 6572 7369 6f6e  License, Version\n-00000600: 2032 2e30 3c2f 6e61 6d65 3e0d 0a20 2020   2.0</name>..   \n-00000610: 2020 203c 7572 6c3e 6874 7470 3a2f 2f77     <url>http://w\n-00000620: 7777 2e61 7061 6368 652e 6f72 672f 6c69  ww.apache.org/li\n-00000630: 6365 6e73 6573 2f4c 4943 454e 5345 2d32  censes/LICENSE-2\n-00000640: 2e30 3c2f 7572 6c3e 0d0a 2020 2020 2020  .0</url>..      \n-00000650: 3c64 6973 7472 6962 7574 696f 6e3e 7265  <distribution>re\n-00000660: 706f 3c2f 6469 7374 7269 6275 7469 6f6e  po</distribution\n-00000670: 3e0d 0a20 2020 203c 2f6c 6963 656e 7365  >..    </license\n-00000680: 3e0d 0a20 203c 2f6c 6963 656e 7365 733e  >..  </licenses>\n-00000690: 0d0a 2020 3c70 726f 7065 7274 6965 733e  ..  <properties>\n-000006a0: 0d0a 2020 2020 3c73 6b69 705f 6d61 7665  ..    <skip_mave\n-000006b0: 6e5f 6465 706c 6f79 3e66 616c 7365 3c2f  n_deploy>false</\n-000006c0: 736b 6970 5f6d 6176 656e 5f64 6570 6c6f  skip_maven_deplo\n-000006d0: 793e 0d0a 2020 3c2f 7072 6f70 6572 7469  y>..  </properti\n-000006e0: 6573 3e0d 0a20 203c 6465 7065 6e64 656e  es>..  <dependen\n-000006f0: 6369 6573 3e0d 0a20 2020 203c 6465 7065  cies>..    <depe\n-00000700: 6e64 656e 6379 3e0d 0a20 2020 2020 203c  ndency>..      <\n-00000710: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n-00000720: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n-00000730: 643e 0d0a 2020 2020 2020 3c61 7274 6966  d>..      <artif\n-00000740: 6163 7449 643e 6475 6262 6f2d 7265 6769  actId>dubbo-regi\n-00000750: 7374 7279 2d61 7069 3c2f 6172 7469 6661  stry-api</artifa\n-00000760: 6374 4964 3e0d 0a20 2020 2020 203c 7665  ctId>..      <ve\n-00000770: 7273 696f 6e3e 247b 7072 6f6a 6563 742e  rsion>${project.\n-00000780: 7061 7265 6e74 2e76 6572 7369 6f6e 7d3c  parent.version}<\n-00000790: 2f76 6572 7369 6f6e 3e0d 0a20 2020 203c  /version>..    <\n-000007a0: 2f64 6570 656e 6465 6e63 793e 0d0a 2020  /dependency>..  \n-000007b0: 2020 3c64 6570 656e 6465 6e63 793e 0d0a    <dependency>..\n-000007c0: 2020 2020 2020 3c67 726f 7570 4964 3e6f        <groupId>o\n-000007d0: 7267 2e61 7061 6368 652e 6475 6262 6f3c  rg.apache.dubbo<\n-000007e0: 2f67 726f 7570 4964 3e0d 0a20 2020 2020  /groupId>..     \n-000007f0: 203c 6172 7469 6661 6374 4964 3e64 7562   <artifactId>dub\n-00000800: 626f 2d72 6567 6973 7472 792d 7a6f 6f6b  bo-registry-zook\n-00000810: 6565 7065 723c 2f61 7274 6966 6163 7449  eeper</artifactI\n-00000820: 643e 0d0a 2020 2020 2020 3c76 6572 7369  d>..      <versi\n-00000830: 6f6e 3e24 7b70 726f 6a65 6374 2e70 6172  on>${project.par\n-00000840: 656e 742e 7665 7273 696f 6e7d 3c2f 7665  ent.version}</ve\n-00000850: 7273 696f 6e3e 0d0a 2020 2020 2020 3c73  rsion>..      <s\n-00000860: 636f 7065 3e74 6573 743c 2f73 636f 7065  cope>test</scope\n-00000870: 3e0d 0a20 2020 203c 2f64 6570 656e 6465  >..    </depende\n-00000880: 6e63 793e 0d0a 2020 2020 3c64 6570 656e  ncy>..    <depen\n-00000890: 6465 6e63 793e 0d0a 2020 2020 2020 3c67  dency>..      <g\n-000008a0: 726f 7570 4964 3e6f 7267 2e61 7061 6368  roupId>org.apach\n-000008b0: 652e 6475 6262 6f3c 2f67 726f 7570 4964  e.dubbo</groupId\n-000008c0: 3e0d 0a20 2020 2020 203c 6172 7469 6661  >..      <artifa\n-000008d0: 6374 4964 3e64 7562 626f 2d72 6567 6973  ctId>dubbo-regis\n-000008e0: 7472 792d 7265 6469 733c 2f61 7274 6966  try-redis</artif\n-000008f0: 6163 7449 643e 0d0a 2020 2020 2020 3c76  actId>..      <v\n-00000900: 6572 7369 6f6e 3e24 7b70 726f 6a65 6374  ersion>${project\n-00000910: 2e70 6172 656e 742e 7665 7273 696f 6e7d  .parent.version}\n-00000920: 3c2f 7665 7273 696f 6e3e 0d0a 2020 2020  </version>..    \n-00000930: 2020 3c73 636f 7065 3e74 6573 743c 2f73    <scope>test</s\n-00000940: 636f 7065 3e0d 0a20 2020 203c 2f64 6570  cope>..    </dep\n-00000950: 656e 6465 6e63 793e 0d0a 2020 2020 3c64  endency>..    <d\n-00000960: 6570 656e 6465 6e63 793e 0d0a 2020 2020  ependency>..    \n-00000970: 2020 3c67 726f 7570 4964 3e6f 7267 2e61    <groupId>org.a\n-00000980: 7061 6368 652e 6375 7261 746f 723c 2f67  pache.curator</g\n-00000990: 726f 7570 4964 3e0d 0a20 2020 2020 203c  roupId>..      <\n-000009a0: 6172 7469 6661 6374 4964 3e63 7572 6174  artifactId>curat\n-000009b0: 6f72 2d74 6573 743c 2f61 7274 6966 6163  or-test</artifac\n-000009c0: 7449 643e 0d0a 2020 2020 2020 3c73 636f  tId>..      <sco\n-000009d0: 7065 3e74 6573 743c 2f73 636f 7065 3e0d  pe>test</scope>.\n-000009e0: 0a20 2020 203c 2f64 6570 656e 6465 6e63  .    </dependenc\n-000009f0: 793e 0d0a 2020 2020 3c64 6570 656e 6465  y>..    <depende\n-00000a00: 6e63 793e 0d0a 2020 2020 2020 3c67 726f  ncy>..      <gro\n-00000a10: 7570 4964 3e63 6f6d 2e67 6974 6875 622e  upId>com.github.\n-00000a20: 6b73 7479 7263 3c2f 6772 6f75 7049 643e  kstyrc</groupId>\n-00000a30: 0d0a 2020 2020 2020 3c61 7274 6966 6163  ..      <artifac\n-00000a40: 7449 643e 656d 6265 6464 6564 2d72 6564  tId>embedded-red\n-00000a50: 6973 3c2f 6172 7469 6661 6374 4964 3e0d  is</artifactId>.\n-00000a60: 0a20 2020 2020 203c 7363 6f70 653e 7465  .      <scope>te\n-00000a70: 7374 3c2f 7363 6f70 653e 0d0a 2020 2020  st</scope>..    \n-00000a80: 3c2f 6465 7065 6e64 656e 6379 3e0d 0a20  </dependency>.. \n-00000a90: 2020 203c 6465 7065 6e64 656e 6379 3e0d     <dependency>.\n-00000aa0: 0a20 2020 2020 203c 6772 6f75 7049 643e  .      <groupId>\n-00000ab0: 6f72 672e 6170 6163 6865 2e63 6f6d 6d6f  org.apache.commo\n-00000ac0: 6e73 3c2f 6772 6f75 7049 643e 0d0a 2020  ns</groupId>..  \n-00000ad0: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n-00000ae0: 636f 6d6d 6f6e 732d 6c61 6e67 333c 2f61  commons-lang3</a\n-00000af0: 7274 6966 6163 7449 643e 0d0a 2020 2020  rtifactId>..    \n-00000b00: 2020 3c73 636f 7065 3e74 6573 743c 2f73    <scope>test</s\n-00000b10: 636f 7065 3e0d 0a20 2020 203c 2f64 6570  cope>..    </dep\n-00000b20: 656e 6465 6e63 793e 0d0a 2020 3c2f 6465  endency>..  </de\n-00000b30: 7065 6e64 656e 6369 6573 3e0d 0a3c 2f70  pendencies>..</p\n-00000b40: 726f 6a65 6374 3e0d 0a                   roject>..\n+00000020: 462d 3822 3f3e 0a3c 212d 2d0a 2020 4c69  F-8\"?>.<!--.  Li\n+00000030: 6365 6e73 6564 2074 6f20 7468 6520 4170  censed to the Ap\n+00000040: 6163 6865 2053 6f66 7477 6172 6520 466f  ache Software Fo\n+00000050: 756e 6461 7469 6f6e 2028 4153 4629 2075  undation (ASF) u\n+00000060: 6e64 6572 206f 6e65 206f 7220 6d6f 7265  nder one or more\n+00000070: 0a20 2063 6f6e 7472 6962 7574 6f72 206c  .  contributor l\n+00000080: 6963 656e 7365 2061 6772 6565 6d65 6e74  icense agreement\n+00000090: 732e 2020 5365 6520 7468 6520 4e4f 5449  s.  See the NOTI\n+000000a0: 4345 2066 696c 6520 6469 7374 7269 6275  CE file distribu\n+000000b0: 7465 6420 7769 7468 0a20 2074 6869 7320  ted with.  this \n+000000c0: 776f 726b 2066 6f72 2061 6464 6974 696f  work for additio\n+000000d0: 6e61 6c20 696e 666f 726d 6174 696f 6e20  nal information \n+000000e0: 7265 6761 7264 696e 6720 636f 7079 7269  regarding copyri\n+000000f0: 6768 7420 6f77 6e65 7273 6869 702e 0a20  ght ownership.. \n+00000100: 2054 6865 2041 5346 206c 6963 656e 7365   The ASF license\n+00000110: 7320 7468 6973 2066 696c 6520 746f 2059  s this file to Y\n+00000120: 6f75 2075 6e64 6572 2074 6865 2041 7061  ou under the Apa\n+00000130: 6368 6520 4c69 6365 6e73 652c 2056 6572  che License, Ver\n+00000140: 7369 6f6e 2032 2e30 0a20 2028 7468 6520  sion 2.0.  (the \n+00000150: 224c 6963 656e 7365 2229 3b20 796f 7520  \"License\"); you \n+00000160: 6d61 7920 6e6f 7420 7573 6520 7468 6973  may not use this\n+00000170: 2066 696c 6520 6578 6365 7074 2069 6e20   file except in \n+00000180: 636f 6d70 6c69 616e 6365 2077 6974 680a  compliance with.\n+00000190: 2020 7468 6520 4c69 6365 6e73 652e 2020    the License.  \n+000001a0: 596f 7520 6d61 7920 6f62 7461 696e 2061  You may obtain a\n+000001b0: 2063 6f70 7920 6f66 2074 6865 204c 6963   copy of the Lic\n+000001c0: 656e 7365 2061 740a 0a20 2020 2020 2068  ense at..      h\n+000001d0: 7474 703a 2f2f 7777 772e 6170 6163 6865  ttp://www.apache\n+000001e0: 2e6f 7267 2f6c 6963 656e 7365 732f 4c49  .org/licenses/LI\n+000001f0: 4345 4e53 452d 322e 300a 0a20 2055 6e6c  CENSE-2.0..  Unl\n+00000200: 6573 7320 7265 7175 6972 6564 2062 7920  ess required by \n+00000210: 6170 706c 6963 6162 6c65 206c 6177 206f  applicable law o\n+00000220: 7220 6167 7265 6564 2074 6f20 696e 2077  r agreed to in w\n+00000230: 7269 7469 6e67 2c20 736f 6674 7761 7265  riting, software\n+00000240: 0a20 2064 6973 7472 6962 7574 6564 2075  .  distributed u\n+00000250: 6e64 6572 2074 6865 204c 6963 656e 7365  nder the License\n+00000260: 2069 7320 6469 7374 7269 6275 7465 6420   is distributed \n+00000270: 6f6e 2061 6e20 2241 5320 4953 2220 4241  on an \"AS IS\" BA\n+00000280: 5349 532c 0a20 2057 4954 484f 5554 2057  SIS,.  WITHOUT W\n+00000290: 4152 5241 4e54 4945 5320 4f52 2043 4f4e  ARRANTIES OR CON\n+000002a0: 4449 5449 4f4e 5320 4f46 2041 4e59 204b  DITIONS OF ANY K\n+000002b0: 494e 442c 2065 6974 6865 7220 6578 7072  IND, either expr\n+000002c0: 6573 7320 6f72 2069 6d70 6c69 6564 2e0a  ess or implied..\n+000002d0: 2020 5365 6520 7468 6520 4c69 6365 6e73    See the Licens\n+000002e0: 6520 666f 7220 7468 6520 7370 6563 6966  e for the specif\n+000002f0: 6963 206c 616e 6775 6167 6520 676f 7665  ic language gove\n+00000300: 726e 696e 6720 7065 726d 6973 7369 6f6e  rning permission\n+00000310: 7320 616e 640a 2020 6c69 6d69 7461 7469  s and.  limitati\n+00000320: 6f6e 7320 756e 6465 7220 7468 6520 4c69  ons under the Li\n+00000330: 6365 6e73 652e 0a20 202d 2d3e 0a3c 7072  cense..  -->.<pr\n+00000340: 6f6a 6563 7420 7873 693a 7363 6865 6d61  oject xsi:schema\n+00000350: 4c6f 6361 7469 6f6e 3d22 6874 7470 3a2f  Location=\"http:/\n+00000360: 2f6d 6176 656e 2e61 7061 6368 652e 6f72  /maven.apache.or\n+00000370: 672f 504f 4d2f 342e 302e 3020 6874 7470  g/POM/4.0.0 http\n+00000380: 733a 2f2f 6d61 7665 6e2e 6170 6163 6865  s://maven.apache\n+00000390: 2e6f 7267 2f78 7364 2f6d 6176 656e 2d34  .org/xsd/maven-4\n+000003a0: 2e30 2e30 2e78 7364 2220 786d 6c6e 733d  .0.0.xsd\" xmlns=\n+000003b0: 2268 7474 703a 2f2f 6d61 7665 6e2e 6170  \"http://maven.ap\n+000003c0: 6163 6865 2e6f 7267 2f50 4f4d 2f34 2e30  ache.org/POM/4.0\n+000003d0: 2e30 220a 2020 2020 786d 6c6e 733a 7873  .0\".    xmlns:xs\n+000003e0: 693d 2268 7474 703a 2f2f 7777 772e 7733  i=\"http://www.w3\n+000003f0: 2e6f 7267 2f32 3030 312f 584d 4c53 6368  .org/2001/XMLSch\n+00000400: 656d 612d 696e 7374 616e 6365 223e 0a20  ema-instance\">. \n+00000410: 203c 6d6f 6465 6c56 6572 7369 6f6e 3e34   <modelVersion>4\n+00000420: 2e30 2e30 3c2f 6d6f 6465 6c56 6572 7369  .0.0</modelVersi\n+00000430: 6f6e 3e0a 2020 3c70 6172 656e 743e 0a20  on>.  <parent>. \n+00000440: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00000450: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n+00000460: 6f75 7049 643e 0a20 2020 203c 6172 7469  oupId>.    <arti\n+00000470: 6661 6374 4964 3e64 7562 626f 2d72 6567  factId>dubbo-reg\n+00000480: 6973 7472 793c 2f61 7274 6966 6163 7449  istry</artifactI\n+00000490: 643e 0a20 2020 203c 7665 7273 696f 6e3e  d>.    <version>\n+000004a0: 322e 372e 3130 3c2f 7665 7273 696f 6e3e  2.7.10</version>\n+000004b0: 0a20 203c 2f70 6172 656e 743e 0a20 203c  .  </parent>.  <\n+000004c0: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n+000004d0: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n+000004e0: 643e 0a20 203c 6172 7469 6661 6374 4964  d>.  <artifactId\n+000004f0: 3e64 7562 626f 2d72 6567 6973 7472 792d  >dubbo-registry-\n+00000500: 6d75 6c74 6970 6c65 3c2f 6172 7469 6661  multiple</artifa\n+00000510: 6374 4964 3e0a 2020 3c76 6572 7369 6f6e  ctId>.  <version\n+00000520: 3e32 2e37 2e31 303c 2f76 6572 7369 6f6e  >2.7.10</version\n+00000530: 3e0a 2020 3c6e 616d 653e 247b 7072 6f6a  >.  <name>${proj\n+00000540: 6563 742e 6172 7469 6661 6374 4964 7d3c  ect.artifactId}<\n+00000550: 2f6e 616d 653e 0a20 203c 6465 7363 7269  /name>.  <descri\n+00000560: 7074 696f 6e3e 5468 6520 6d75 6c74 6970  ption>The multip\n+00000570: 6c65 2072 6567 6973 7472 7920 6d6f 6475  le registry modu\n+00000580: 6c65 206f 6620 6475 6262 6f20 7072 6f6a  le of dubbo proj\n+00000590: 6563 743c 2f64 6573 6372 6970 7469 6f6e  ect</description\n+000005a0: 3e0a 2020 3c6c 6963 656e 7365 733e 0a20  >.  <licenses>. \n+000005b0: 2020 203c 6c69 6365 6e73 653e 0a20 2020     <license>.   \n+000005c0: 2020 203c 6e61 6d65 3e41 7061 6368 6520     <name>Apache \n+000005d0: 4c69 6365 6e73 652c 2056 6572 7369 6f6e  License, Version\n+000005e0: 2032 2e30 3c2f 6e61 6d65 3e0a 2020 2020   2.0</name>.    \n+000005f0: 2020 3c75 726c 3e68 7474 703a 2f2f 7777    <url>http://ww\n+00000600: 772e 6170 6163 6865 2e6f 7267 2f6c 6963  w.apache.org/lic\n+00000610: 656e 7365 732f 4c49 4345 4e53 452d 322e  enses/LICENSE-2.\n+00000620: 303c 2f75 726c 3e0a 2020 2020 2020 3c64  0</url>.      <d\n+00000630: 6973 7472 6962 7574 696f 6e3e 7265 706f  istribution>repo\n+00000640: 3c2f 6469 7374 7269 6275 7469 6f6e 3e0a  </distribution>.\n+00000650: 2020 2020 3c2f 6c69 6365 6e73 653e 0a20      </license>. \n+00000660: 203c 2f6c 6963 656e 7365 733e 0a20 203c   </licenses>.  <\n+00000670: 7072 6f70 6572 7469 6573 3e0a 2020 2020  properties>.    \n+00000680: 3c73 6b69 705f 6d61 7665 6e5f 6465 706c  <skip_maven_depl\n+00000690: 6f79 3e66 616c 7365 3c2f 736b 6970 5f6d  oy>false</skip_m\n+000006a0: 6176 656e 5f64 6570 6c6f 793e 0a20 203c  aven_deploy>.  <\n+000006b0: 2f70 726f 7065 7274 6965 733e 0a20 203c  /properties>.  <\n+000006c0: 6465 7065 6e64 656e 6369 6573 3e0a 2020  dependencies>.  \n+000006d0: 2020 3c64 6570 656e 6465 6e63 793e 0a20    <dependency>. \n+000006e0: 2020 2020 203c 6772 6f75 7049 643e 6f72       <groupId>or\n+000006f0: 672e 6170 6163 6865 2e64 7562 626f 3c2f  g.apache.dubbo</\n+00000700: 6772 6f75 7049 643e 0a20 2020 2020 203c  groupId>.      <\n+00000710: 6172 7469 6661 6374 4964 3e64 7562 626f  artifactId>dubbo\n+00000720: 2d72 6567 6973 7472 792d 6170 693c 2f61  -registry-api</a\n+00000730: 7274 6966 6163 7449 643e 0a20 2020 2020  rtifactId>.     \n+00000740: 203c 7665 7273 696f 6e3e 247b 7072 6f6a   <version>${proj\n+00000750: 6563 742e 7061 7265 6e74 2e76 6572 7369  ect.parent.versi\n+00000760: 6f6e 7d3c 2f76 6572 7369 6f6e 3e0a 2020  on}</version>.  \n+00000770: 2020 3c2f 6465 7065 6e64 656e 6379 3e0a    </dependency>.\n+00000780: 2020 2020 3c64 6570 656e 6465 6e63 793e      <dependency>\n+00000790: 0a20 2020 2020 203c 6772 6f75 7049 643e  .      <groupId>\n+000007a0: 6f72 672e 6170 6163 6865 2e64 7562 626f  org.apache.dubbo\n+000007b0: 3c2f 6772 6f75 7049 643e 0a20 2020 2020  </groupId>.     \n+000007c0: 203c 6172 7469 6661 6374 4964 3e64 7562   <artifactId>dub\n+000007d0: 626f 2d72 6567 6973 7472 792d 7a6f 6f6b  bo-registry-zook\n+000007e0: 6565 7065 723c 2f61 7274 6966 6163 7449  eeper</artifactI\n+000007f0: 643e 0a20 2020 2020 203c 7665 7273 696f  d>.      <versio\n+00000800: 6e3e 247b 7072 6f6a 6563 742e 7061 7265  n>${project.pare\n+00000810: 6e74 2e76 6572 7369 6f6e 7d3c 2f76 6572  nt.version}</ver\n+00000820: 7369 6f6e 3e0a 2020 2020 2020 3c73 636f  sion>.      <sco\n+00000830: 7065 3e74 6573 743c 2f73 636f 7065 3e0a  pe>test</scope>.\n+00000840: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n+00000850: 3e0a 2020 2020 3c64 6570 656e 6465 6e63  >.    <dependenc\n+00000860: 793e 0a20 2020 2020 203c 6772 6f75 7049  y>.      <groupI\n+00000870: 643e 6f72 672e 6170 6163 6865 2e64 7562  d>org.apache.dub\n+00000880: 626f 3c2f 6772 6f75 7049 643e 0a20 2020  bo</groupId>.   \n+00000890: 2020 203c 6172 7469 6661 6374 4964 3e64     <artifactId>d\n+000008a0: 7562 626f 2d72 6567 6973 7472 792d 7265  ubbo-registry-re\n+000008b0: 6469 733c 2f61 7274 6966 6163 7449 643e  dis</artifactId>\n+000008c0: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n+000008d0: 247b 7072 6f6a 6563 742e 7061 7265 6e74  ${project.parent\n+000008e0: 2e76 6572 7369 6f6e 7d3c 2f76 6572 7369  .version}</versi\n+000008f0: 6f6e 3e0a 2020 2020 2020 3c73 636f 7065  on>.      <scope\n+00000900: 3e74 6573 743c 2f73 636f 7065 3e0a 2020  >test</scope>.  \n+00000910: 2020 3c2f 6465 7065 6e64 656e 6379 3e0a    </dependency>.\n+00000920: 2020 2020 3c64 6570 656e 6465 6e63 793e      <dependency>\n+00000930: 0a20 2020 2020 203c 6772 6f75 7049 643e  .      <groupId>\n+00000940: 6f72 672e 6170 6163 6865 2e63 7572 6174  org.apache.curat\n+00000950: 6f72 3c2f 6772 6f75 7049 643e 0a20 2020  or</groupId>.   \n+00000960: 2020 203c 6172 7469 6661 6374 4964 3e63     <artifactId>c\n+00000970: 7572 6174 6f72 2d74 6573 743c 2f61 7274  urator-test</art\n+00000980: 6966 6163 7449 643e 0a20 2020 2020 203c  ifactId>.      <\n+00000990: 7363 6f70 653e 7465 7374 3c2f 7363 6f70  scope>test</scop\n+000009a0: 653e 0a20 2020 203c 2f64 6570 656e 6465  e>.    </depende\n+000009b0: 6e63 793e 0a20 2020 203c 6465 7065 6e64  ncy>.    <depend\n+000009c0: 656e 6379 3e0a 2020 2020 2020 3c67 726f  ency>.      <gro\n+000009d0: 7570 4964 3e63 6f6d 2e67 6974 6875 622e  upId>com.github.\n+000009e0: 6b73 7479 7263 3c2f 6772 6f75 7049 643e  kstyrc</groupId>\n+000009f0: 0a20 2020 2020 203c 6172 7469 6661 6374  .      <artifact\n+00000a00: 4964 3e65 6d62 6564 6465 642d 7265 6469  Id>embedded-redi\n+00000a10: 733c 2f61 7274 6966 6163 7449 643e 0a20  s</artifactId>. \n+00000a20: 2020 2020 203c 7363 6f70 653e 7465 7374       <scope>test\n+00000a30: 3c2f 7363 6f70 653e 0a20 2020 203c 2f64  </scope>.    </d\n+00000a40: 6570 656e 6465 6e63 793e 0a20 2020 203c  ependency>.    <\n+00000a50: 6465 7065 6e64 656e 6379 3e0a 2020 2020  dependency>.    \n+00000a60: 2020 3c67 726f 7570 4964 3e6f 7267 2e61    <groupId>org.a\n+00000a70: 7061 6368 652e 636f 6d6d 6f6e 733c 2f67  pache.commons</g\n+00000a80: 726f 7570 4964 3e0a 2020 2020 2020 3c61  roupId>.      <a\n+00000a90: 7274 6966 6163 7449 643e 636f 6d6d 6f6e  rtifactId>common\n+00000aa0: 732d 6c61 6e67 333c 2f61 7274 6966 6163  s-lang3</artifac\n+00000ab0: 7449 643e 0a20 2020 2020 203c 7363 6f70  tId>.      <scop\n+00000ac0: 653e 7465 7374 3c2f 7363 6f70 653e 0a20  e>test</scope>. \n+00000ad0: 2020 203c 2f64 6570 656e 6465 6e63 793e     </dependency>\n+00000ae0: 0a20 203c 2f64 6570 656e 6465 6e63 6965  .  </dependencie\n+00000af0: 733e 0a3c 2f70 726f 6a65 6374 3e0a       s>.</project>.\n"}]}
