{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,31 +1,31 @@\n-Zip file size: 82208 bytes, number of entries: 29\n+Zip file size: 83563 bytes, number of entries: 29\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n -rw----     2.0 fat     8297 bX stor 70-Jan-01 00:00 META-INF/DEPENDENCIES\n -rw----     2.0 fat    11358 bX stor 70-Jan-01 00:00 META-INF/LICENSE\n -rw----     2.0 fat       25 bX stor 70-Jan-01 00:00 META-INF/MANIFEST.MF\n -rw----     2.0 fat      177 bX stor 70-Jan-01 00:00 META-INF/NOTICE\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/dubbo/internal/\n -rw----     2.0 fat       58 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory\n -rw----     2.0 fat       59 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscovery\n -rw----     2.0 fat       66 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscoveryFactory\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-registry-nacos/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-registry-nacos/pom.properties\n--rw----     2.0 fat     3123 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-registry-nacos/pom.xml\n+-rw----     2.0 fat     3041 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-registry-nacos/pom.xml\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/registry/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/\n--rw----     2.0 fat     3577 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosNamingServiceWrapper.java\n--rw----     2.0 fat    23611 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosRegistry.java\n--rw----     2.0 fat     1910 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosRegistryFactory.java\n--rw----     2.0 fat     5828 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosServiceDiscovery.java\n--rw----     2.0 fat     1241 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosServiceDiscoveryFactory.java\n--rw----     2.0 fat     6779 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosServiceName.java\n+-rw----     2.0 fat     3664 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosNamingServiceWrapper.java\n+-rw----     2.0 fat    24235 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosRegistry.java\n+-rw----     2.0 fat     1959 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosRegistryFactory.java\n+-rw----     2.0 fat     5982 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosServiceDiscovery.java\n+-rw----     2.0 fat     1274 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosServiceDiscoveryFactory.java\n+-rw----     2.0 fat     7013 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/NacosServiceName.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/util/\n--rw----     2.0 fat     2744 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java\n--rw----     2.0 fat     8001 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/util/NacosNamingServiceUtils.java\n-29 files, 76854 bytes uncompressed, 76854 bytes compressed:  0.0%\n+-rw----     2.0 fat     2811 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java\n+-rw----     2.0 fat     8190 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/nacos/util/NacosNamingServiceUtils.java\n+29 files, 78209 bytes uncompressed, 78209 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -368,1232 +368,1232 @@\n #\n 0533D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 0533F   Length              0005 (5)\n 05341   Flags               01 (1) 'Modification'\n 05342   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 05346 PAYLOAD\n \n-05F79 DATA DESCRIPTOR       08074B50 (134695760)\n-05F7D CRC                   0701BB57 (117554007)\n-05F81 Compressed Size       00000C33 (3123)\n-05F85 Uncompressed Size     00000C33 (3123)\n-\n-05F89 LOCAL HEADER #16      04034B50 (67324752)\n-05F8D Extract Zip Spec      14 (20) '2.0'\n-05F8E Extract OS            00 (0) 'MS-DOS'\n-05F8F General Purpose Flag  0000 (0)\n-05F91 Compression Method    0000 (0) 'Stored'\n-05F93 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05F97 CRC                   00000000 (0)\n-05F9B Compressed Size       00000000 (0)\n-05F9F Uncompressed Size     00000000 (0)\n-05FA3 Filename Length       0004 (4)\n-05FA5 Extra Length          0009 (9)\n-05FA7 Filename              'XXXX'\n-#\n-# WARNING: Offset 0x5FA7: Filename 'XXXX'\n-#          Zero length filename\n-#\n-05FAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05FAD   Length              0005 (5)\n-05FAF   Flags               01 (1) 'Modification'\n-05FB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05FB4 LOCAL HEADER #17      04034B50 (67324752)\n-05FB8 Extract Zip Spec      14 (20) '2.0'\n-05FB9 Extract OS            00 (0) 'MS-DOS'\n-05FBA General Purpose Flag  0000 (0)\n-05FBC Compression Method    0000 (0) 'Stored'\n-05FBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05FC2 CRC                   00000000 (0)\n-05FC6 Compressed Size       00000000 (0)\n-05FCA Uncompressed Size     00000000 (0)\n-05FCE Filename Length       000B (11)\n-05FD0 Extra Length          0009 (9)\n-05FD2 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5FD2: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05FDD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05FDF   Length              0005 (5)\n-05FE1   Flags               01 (1) 'Modification'\n-05FE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05FE6 LOCAL HEADER #18      04034B50 (67324752)\n-05FEA Extract Zip Spec      14 (20) '2.0'\n-05FEB Extract OS            00 (0) 'MS-DOS'\n-05FEC General Purpose Flag  0000 (0)\n-05FEE Compression Method    0000 (0) 'Stored'\n-05FF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05FF4 CRC                   00000000 (0)\n-05FF8 Compressed Size       00000000 (0)\n-05FFC Uncompressed Size     00000000 (0)\n-06000 Filename Length       0011 (17)\n-06002 Extra Length          0009 (9)\n-06004 Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6004: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06015 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06017   Length              0005 (5)\n-06019   Flags               01 (1) 'Modification'\n-0601A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0601E LOCAL HEADER #19      04034B50 (67324752)\n-06022 Extract Zip Spec      14 (20) '2.0'\n-06023 Extract OS            00 (0) 'MS-DOS'\n-06024 General Purpose Flag  0000 (0)\n-06026 Compression Method    0000 (0) 'Stored'\n-06028 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0602C CRC                   00000000 (0)\n-06030 Compressed Size       00000000 (0)\n-06034 Uncompressed Size     00000000 (0)\n-06038 Filename Length       001A (26)\n-0603A Extra Length          0009 (9)\n-0603C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x603C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06056 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06058   Length              0005 (5)\n-0605A   Flags               01 (1) 'Modification'\n-0605B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0605F LOCAL HEADER #20      04034B50 (67324752)\n-06063 Extract Zip Spec      14 (20) '2.0'\n-06064 Extract OS            00 (0) 'MS-DOS'\n-06065 General Purpose Flag  0000 (0)\n-06067 Compression Method    0000 (0) 'Stored'\n-06069 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0606D CRC                   00000000 (0)\n-06071 Compressed Size       00000000 (0)\n-06075 Uncompressed Size     00000000 (0)\n-06079 Filename Length       0020 (32)\n-0607B Extra Length          0009 (9)\n-0607D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x607D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0609D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0609F   Length              0005 (5)\n-060A1   Flags               01 (1) 'Modification'\n-060A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-060A6 LOCAL HEADER #21      04034B50 (67324752)\n-060AA Extract Zip Spec      14 (20) '2.0'\n-060AB Extract OS            00 (0) 'MS-DOS'\n-060AC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-060AE Compression Method    0000 (0) 'Stored'\n-060B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-060B4 CRC                   00000000 (0)\n-060B8 Compressed Size       00000000 (0)\n-060BC Uncompressed Size     00000000 (0)\n-060C0 Filename Length       003E (62)\n-060C2 Extra Length          0009 (9)\n-060C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x60C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06102 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06104   Length              0005 (5)\n-06106   Flags               01 (1) 'Modification'\n-06107   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0610B PAYLOAD\n-\n-06F04 DATA DESCRIPTOR       08074B50 (134695760)\n-06F08 CRC                   BB0161DF (3137429983)\n-06F0C Compressed Size       00000DF9 (3577)\n-06F10 Uncompressed Size     00000DF9 (3577)\n-\n-06F14 LOCAL HEADER #22      04034B50 (67324752)\n-06F18 Extract Zip Spec      14 (20) '2.0'\n-06F19 Extract OS            00 (0) 'MS-DOS'\n-06F1A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-06F1C Compression Method    0000 (0) 'Stored'\n-06F1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06F22 CRC                   00000000 (0)\n-06F26 Compressed Size       00000000 (0)\n-06F2A Uncompressed Size     00000000 (0)\n-06F2E Filename Length       0032 (50)\n-06F30 Extra Length          0009 (9)\n-06F32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6F32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06F64 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06F66   Length              0005 (5)\n-06F68   Flags               01 (1) 'Modification'\n-06F69   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06F6D PAYLOAD\n-\n-0CBA8 DATA DESCRIPTOR       08074B50 (134695760)\n-0CBAC CRC                   E2B000EA (3803185386)\n-0CBB0 Compressed Size       00005C3B (23611)\n-0CBB4 Uncompressed Size     00005C3B (23611)\n-\n-0CBB8 LOCAL HEADER #23      04034B50 (67324752)\n-0CBBC Extract Zip Spec      14 (20) '2.0'\n-0CBBD Extract OS            00 (0) 'MS-DOS'\n-0CBBE General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0CBC0 Compression Method    0000 (0) 'Stored'\n-0CBC2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CBC6 CRC                   00000000 (0)\n-0CBCA Compressed Size       00000000 (0)\n-0CBCE Uncompressed Size     00000000 (0)\n-0CBD2 Filename Length       0039 (57)\n-0CBD4 Extra Length          0009 (9)\n-0CBD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCBD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CC0F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CC11   Length              0005 (5)\n-0CC13   Flags               01 (1) 'Modification'\n-0CC14   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CC18 PAYLOAD\n-\n-0D38E DATA DESCRIPTOR       08074B50 (134695760)\n-0D392 CRC                   A100EF71 (2701193073)\n-0D396 Compressed Size       00000776 (1910)\n-0D39A Uncompressed Size     00000776 (1910)\n-\n-0D39E LOCAL HEADER #24      04034B50 (67324752)\n-0D3A2 Extract Zip Spec      14 (20) '2.0'\n-0D3A3 Extract OS            00 (0) 'MS-DOS'\n-0D3A4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0D3A6 Compression Method    0000 (0) 'Stored'\n-0D3A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D3AC CRC                   00000000 (0)\n-0D3B0 Compressed Size       00000000 (0)\n-0D3B4 Uncompressed Size     00000000 (0)\n-0D3B8 Filename Length       003A (58)\n-0D3BA Extra Length          0009 (9)\n-0D3BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD3BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D3F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D3F8   Length              0005 (5)\n-0D3FA   Flags               01 (1) 'Modification'\n-0D3FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D3FF PAYLOAD\n-\n-0EAC3 DATA DESCRIPTOR       08074B50 (134695760)\n-0EAC7 CRC                   2220AA2B (572566059)\n-0EACB Compressed Size       000016C4 (5828)\n-0EACF Uncompressed Size     000016C4 (5828)\n-\n-0EAD3 LOCAL HEADER #25      04034B50 (67324752)\n-0EAD7 Extract Zip Spec      14 (20) '2.0'\n-0EAD8 Extract OS            00 (0) 'MS-DOS'\n-0EAD9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0EADB Compression Method    0000 (0) 'Stored'\n-0EADD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EAE1 CRC                   00000000 (0)\n-0EAE5 Compressed Size       00000000 (0)\n-0EAE9 Uncompressed Size     00000000 (0)\n-0EAED Filename Length       0041 (65)\n-0EAEF Extra Length          0009 (9)\n-0EAF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEAF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EB32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EB34   Length              0005 (5)\n-0EB36   Flags               01 (1) 'Modification'\n-0EB37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EB3B PAYLOAD\n-\n-0F014 DATA DESCRIPTOR       08074B50 (134695760)\n-0F018 CRC                   94B18BA4 (2494663588)\n-0F01C Compressed Size       000004D9 (1241)\n-0F020 Uncompressed Size     000004D9 (1241)\n-\n-0F024 LOCAL HEADER #26      04034B50 (67324752)\n-0F028 Extract Zip Spec      14 (20) '2.0'\n-0F029 Extract OS            00 (0) 'MS-DOS'\n-0F02A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0F02C Compression Method    0000 (0) 'Stored'\n-0F02E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F032 CRC                   00000000 (0)\n-0F036 Compressed Size       00000000 (0)\n-0F03A Uncompressed Size     00000000 (0)\n-0F03E Filename Length       0035 (53)\n-0F040 Extra Length          0009 (9)\n-0F042 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF042: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F077 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F079   Length              0005 (5)\n-0F07B   Flags               01 (1) 'Modification'\n-0F07C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F080 PAYLOAD\n-\n-10AFB DATA DESCRIPTOR       08074B50 (134695760)\n-10AFF CRC                   F3388AB4 (4080569012)\n-10B03 Compressed Size       00001A7B (6779)\n-10B07 Uncompressed Size     00001A7B (6779)\n-\n-10B0B LOCAL HEADER #27      04034B50 (67324752)\n-10B0F Extract Zip Spec      14 (20) '2.0'\n-10B10 Extract OS            00 (0) 'MS-DOS'\n-10B11 General Purpose Flag  0000 (0)\n-10B13 Compression Method    0000 (0) 'Stored'\n-10B15 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10B19 CRC                   00000000 (0)\n-10B1D Compressed Size       00000000 (0)\n-10B21 Uncompressed Size     00000000 (0)\n-10B25 Filename Length       0025 (37)\n-10B27 Extra Length          0009 (9)\n-10B29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10B29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10B4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10B50   Length              0005 (5)\n-10B52   Flags               01 (1) 'Modification'\n-10B53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-10B57 LOCAL HEADER #28      04034B50 (67324752)\n-10B5B Extract Zip Spec      14 (20) '2.0'\n-10B5C Extract OS            00 (0) 'MS-DOS'\n-10B5D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-10B5F Compression Method    0000 (0) 'Stored'\n-10B61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10B65 CRC                   00000000 (0)\n-10B69 Compressed Size       00000000 (0)\n-10B6D Uncompressed Size     00000000 (0)\n-10B71 Filename Length       0041 (65)\n-10B73 Extra Length          0009 (9)\n-10B75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10B75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10BB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10BB8   Length              0005 (5)\n-10BBA   Flags               01 (1) 'Modification'\n-10BBB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10BBF PAYLOAD\n-\n-11677 DATA DESCRIPTOR       08074B50 (134695760)\n-1167B CRC                   D4BBF170 (3569086832)\n-1167F Compressed Size       00000AB8 (2744)\n-11683 Uncompressed Size     00000AB8 (2744)\n-\n-11687 LOCAL HEADER #29      04034B50 (67324752)\n-1168B Extract Zip Spec      14 (20) '2.0'\n-1168C Extract OS            00 (0) 'MS-DOS'\n-1168D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1168F Compression Method    0000 (0) 'Stored'\n-11691 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11695 CRC                   00000000 (0)\n-11699 Compressed Size       00000000 (0)\n-1169D Uncompressed Size     00000000 (0)\n-116A1 Filename Length       0041 (65)\n-116A3 Extra Length          0009 (9)\n-116A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x116A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-116E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-116E8   Length              0005 (5)\n-116EA   Flags               01 (1) 'Modification'\n-116EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-116EF PAYLOAD\n-\n-13630 DATA DESCRIPTOR       08074B50 (134695760)\n-13634 CRC                   76AAEB5B (1990912859)\n-13638 Compressed Size       00001F41 (8001)\n-1363C Uncompressed Size     00001F41 (8001)\n-\n-13640 CENTRAL HEADER #1     02014B50 (33639248)\n-13644 Created Zip Spec      14 (20) '2.0'\n-13645 Created OS            00 (0) 'MS-DOS'\n-13646 Extract Zip Spec      14 (20) '2.0'\n-13647 Extract OS            00 (0) 'MS-DOS'\n-13648 General Purpose Flag  0000 (0)\n-1364A Compression Method    0000 (0) 'Stored'\n-1364C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13650 CRC                   00000000 (0)\n-13654 Compressed Size       00000000 (0)\n-13658 Uncompressed Size     00000000 (0)\n-1365C Filename Length       0009 (9)\n-1365E Extra Length          0009 (9)\n-13660 Comment Length        0000 (0)\n-13662 Disk Start            0000 (0)\n-13664 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13666 Ext File Attributes   00000000 (0)\n-1366A Local Header Offset   00000000 (0)\n-1366E Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x1366E: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-13677 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13679   Length              0005 (5)\n-1367B   Flags               01 (1) 'Modification'\n-1367C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13680 CENTRAL HEADER #2     02014B50 (33639248)\n-13684 Created Zip Spec      14 (20) '2.0'\n-13685 Created OS            00 (0) 'MS-DOS'\n-13686 Extract Zip Spec      14 (20) '2.0'\n-13687 Extract OS            00 (0) 'MS-DOS'\n-13688 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1368A Compression Method    0000 (0) 'Stored'\n-1368C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13690 CRC                   3C2DFD2C (1009646892)\n-13694 Compressed Size       00002069 (8297)\n-13698 Uncompressed Size     00002069 (8297)\n-1369C Filename Length       0015 (21)\n-1369E Extra Length          0009 (9)\n-136A0 Comment Length        0000 (0)\n-136A2 Disk Start            0000 (0)\n-136A4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-136A6 Ext File Attributes   00000000 (0)\n-136AA Local Header Offset   00000030 (48)\n-136AE Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x136AE: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-136C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-136C5   Length              0005 (5)\n-136C7   Flags               01 (1) 'Modification'\n-136C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-136CC CENTRAL HEADER #3     02014B50 (33639248)\n-136D0 Created Zip Spec      14 (20) '2.0'\n-136D1 Created OS            00 (0) 'MS-DOS'\n-136D2 Extract Zip Spec      14 (20) '2.0'\n-136D3 Extract OS            00 (0) 'MS-DOS'\n-136D4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-136D6 Compression Method    0000 (0) 'Stored'\n-136D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-136DC CRC                   86E2B4B4 (2263004340)\n-136E0 Compressed Size       00002C5E (11358)\n-136E4 Uncompressed Size     00002C5E (11358)\n-136E8 Filename Length       0010 (16)\n-136EA Extra Length          0009 (9)\n-136EC Comment Length        0000 (0)\n-136EE Disk Start            0000 (0)\n-136F0 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-136F2 Ext File Attributes   00000000 (0)\n-136F6 Local Header Offset   000020E5 (8421)\n-136FA Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x136FA: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1370A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1370C   Length              0005 (5)\n-1370E   Flags               01 (1) 'Modification'\n-1370F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13713 CENTRAL HEADER #4     02014B50 (33639248)\n-13717 Created Zip Spec      14 (20) '2.0'\n-13718 Created OS            00 (0) 'MS-DOS'\n-13719 Extract Zip Spec      14 (20) '2.0'\n-1371A Extract OS            00 (0) 'MS-DOS'\n-1371B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1371D Compression Method    0000 (0) 'Stored'\n-1371F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13723 CRC                   EE027FB2 (3993141170)\n-13727 Compressed Size       00000019 (25)\n-1372B Uncompressed Size     00000019 (25)\n-1372F Filename Length       0014 (20)\n-13731 Extra Length          0009 (9)\n-13733 Comment Length        0000 (0)\n-13735 Disk Start            0000 (0)\n-13737 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13739 Ext File Attributes   00000000 (0)\n-1373D Local Header Offset   00004D8A (19850)\n-13741 Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13741: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13755 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13757   Length              0005 (5)\n-13759   Flags               01 (1) 'Modification'\n-1375A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1375E CENTRAL HEADER #5     02014B50 (33639248)\n-13762 Created Zip Spec      14 (20) '2.0'\n-13763 Created OS            00 (0) 'MS-DOS'\n-13764 Extract Zip Spec      14 (20) '2.0'\n-13765 Extract OS            00 (0) 'MS-DOS'\n-13766 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13768 Compression Method    0000 (0) 'Stored'\n-1376A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1376E CRC                   CE04F4D7 (3456431319)\n-13772 Compressed Size       000000B1 (177)\n-13776 Uncompressed Size     000000B1 (177)\n-1377A Filename Length       000F (15)\n-1377C Extra Length          0009 (9)\n-1377E Comment Length        0000 (0)\n-13780 Disk Start            0000 (0)\n-13782 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13784 Ext File Attributes   00000000 (0)\n-13788 Local Header Offset   00004DEE (19950)\n-1378C Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1378C: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1379B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1379D   Length              0005 (5)\n-1379F   Flags               01 (1) 'Modification'\n-137A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-137A4 CENTRAL HEADER #6     02014B50 (33639248)\n-137A8 Created Zip Spec      14 (20) '2.0'\n-137A9 Created OS            00 (0) 'MS-DOS'\n-137AA Extract Zip Spec      14 (20) '2.0'\n-137AB Extract OS            00 (0) 'MS-DOS'\n-137AC General Purpose Flag  0000 (0)\n-137AE Compression Method    0000 (0) 'Stored'\n-137B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-137B4 CRC                   00000000 (0)\n-137B8 Compressed Size       00000000 (0)\n-137BC Uncompressed Size     00000000 (0)\n-137C0 Filename Length       000F (15)\n-137C2 Extra Length          0009 (9)\n-137C4 Comment Length        0000 (0)\n-137C6 Disk Start            0000 (0)\n-137C8 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-137CA Ext File Attributes   00000000 (0)\n-137CE Local Header Offset   00004EE5 (20197)\n-137D2 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x137D2: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-137E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-137E3   Length              0005 (5)\n-137E5   Flags               01 (1) 'Modification'\n-137E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-137EA CENTRAL HEADER #7     02014B50 (33639248)\n-137EE Created Zip Spec      14 (20) '2.0'\n-137EF Created OS            00 (0) 'MS-DOS'\n-137F0 Extract Zip Spec      14 (20) '2.0'\n-137F1 Extract OS            00 (0) 'MS-DOS'\n-137F2 General Purpose Flag  0000 (0)\n-137F4 Compression Method    0000 (0) 'Stored'\n-137F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-137FA CRC                   00000000 (0)\n-137FE Compressed Size       00000000 (0)\n-13802 Uncompressed Size     00000000 (0)\n-13806 Filename Length       0018 (24)\n-13808 Extra Length          0009 (9)\n-1380A Comment Length        0000 (0)\n-1380C Disk Start            0000 (0)\n-1380E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13810 Ext File Attributes   00000000 (0)\n-13814 Local Header Offset   00004F1B (20251)\n-13818 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13818: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13830 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13832   Length              0005 (5)\n-13834   Flags               01 (1) 'Modification'\n-13835   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13839 CENTRAL HEADER #8     02014B50 (33639248)\n-1383D Created Zip Spec      14 (20) '2.0'\n-1383E Created OS            00 (0) 'MS-DOS'\n-1383F Extract Zip Spec      14 (20) '2.0'\n-13840 Extract OS            00 (0) 'MS-DOS'\n-13841 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13843 Compression Method    0000 (0) 'Stored'\n-13845 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13849 CRC                   9217B46E (2451027054)\n-1384D Compressed Size       0000003A (58)\n-13851 Uncompressed Size     0000003A (58)\n-13855 Filename Length       0041 (65)\n-13857 Extra Length          0009 (9)\n-13859 Comment Length        0000 (0)\n-1385B Disk Start            0000 (0)\n-1385D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-1385F Ext File Attributes   00000000 (0)\n-13863 Local Header Offset   00004F5A (20314)\n-13867 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13867: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-138A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-138AA   Length              0005 (5)\n-138AC   Flags               01 (1) 'Modification'\n-138AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-138B1 CENTRAL HEADER #9     02014B50 (33639248)\n-138B5 Created Zip Spec      14 (20) '2.0'\n-138B6 Created OS            00 (0) 'MS-DOS'\n-138B7 Extract Zip Spec      14 (20) '2.0'\n-138B8 Extract OS            00 (0) 'MS-DOS'\n-138B9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-138BB Compression Method    0000 (0) 'Stored'\n-138BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-138C1 CRC                   E5088BE5 (3842542565)\n-138C5 Compressed Size       0000003B (59)\n-138C9 Uncompressed Size     0000003B (59)\n-138CD Filename Length       0049 (73)\n-138CF Extra Length          0009 (9)\n-138D1 Comment Length        0000 (0)\n-138D3 Disk Start            0000 (0)\n-138D5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-138D7 Ext File Attributes   00000000 (0)\n-138DB Local Header Offset   0000500C (20492)\n-138DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x138DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13928 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1392A   Length              0005 (5)\n-1392C   Flags               01 (1) 'Modification'\n-1392D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13931 CENTRAL HEADER #10    02014B50 (33639248)\n-13935 Created Zip Spec      14 (20) '2.0'\n-13936 Created OS            00 (0) 'MS-DOS'\n-13937 Extract Zip Spec      14 (20) '2.0'\n-13938 Extract OS            00 (0) 'MS-DOS'\n-13939 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1393B Compression Method    0000 (0) 'Stored'\n-1393D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13941 CRC                   C0B5B005 (3233132549)\n-13945 Compressed Size       00000042 (66)\n-13949 Uncompressed Size     00000042 (66)\n-1394D Filename Length       0050 (80)\n-1394F Extra Length          0009 (9)\n-13951 Comment Length        0000 (0)\n-13953 Disk Start            0000 (0)\n-13955 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13957 Ext File Attributes   00000000 (0)\n-1395B Local Header Offset   000050C7 (20679)\n-1395F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1395F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-139AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-139B1   Length              0005 (5)\n-139B3   Flags               01 (1) 'Modification'\n-139B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-139B8 CENTRAL HEADER #11    02014B50 (33639248)\n-139BC Created Zip Spec      14 (20) '2.0'\n-139BD Created OS            00 (0) 'MS-DOS'\n-139BE Extract Zip Spec      14 (20) '2.0'\n-139BF Extract OS            00 (0) 'MS-DOS'\n-139C0 General Purpose Flag  0000 (0)\n-139C2 Compression Method    0000 (0) 'Stored'\n-139C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-139C8 CRC                   00000000 (0)\n-139CC Compressed Size       00000000 (0)\n-139D0 Uncompressed Size     00000000 (0)\n-139D4 Filename Length       000F (15)\n-139D6 Extra Length          0009 (9)\n-139D8 Comment Length        0000 (0)\n-139DA Disk Start            0000 (0)\n-139DC Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-139DE Ext File Attributes   00000000 (0)\n-139E2 Local Header Offset   00005190 (20880)\n-139E6 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x139E6: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-139F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-139F7   Length              0005 (5)\n-139F9   Flags               01 (1) 'Modification'\n-139FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-139FE CENTRAL HEADER #12    02014B50 (33639248)\n-13A02 Created Zip Spec      14 (20) '2.0'\n-13A03 Created OS            00 (0) 'MS-DOS'\n-13A04 Extract Zip Spec      14 (20) '2.0'\n-13A05 Extract OS            00 (0) 'MS-DOS'\n-13A06 General Purpose Flag  0000 (0)\n-13A08 Compression Method    0000 (0) 'Stored'\n-13A0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13A0E CRC                   00000000 (0)\n-13A12 Compressed Size       00000000 (0)\n-13A16 Uncompressed Size     00000000 (0)\n-13A1A Filename Length       0020 (32)\n-13A1C Extra Length          0009 (9)\n-13A1E Comment Length        0000 (0)\n-13A20 Disk Start            0000 (0)\n-13A22 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13A24 Ext File Attributes   00000000 (0)\n-13A28 Local Header Offset   000051C6 (20934)\n-13A2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13A2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13A4C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13A4E   Length              0005 (5)\n-13A50   Flags               01 (1) 'Modification'\n-13A51   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13A55 CENTRAL HEADER #13    02014B50 (33639248)\n-13A59 Created Zip Spec      14 (20) '2.0'\n-13A5A Created OS            00 (0) 'MS-DOS'\n-13A5B Extract Zip Spec      14 (20) '2.0'\n-13A5C Extract OS            00 (0) 'MS-DOS'\n-13A5D General Purpose Flag  0000 (0)\n-13A5F Compression Method    0000 (0) 'Stored'\n-13A61 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13A65 CRC                   00000000 (0)\n-13A69 Compressed Size       00000000 (0)\n-13A6D Uncompressed Size     00000000 (0)\n-13A71 Filename Length       0035 (53)\n-13A73 Extra Length          0009 (9)\n-13A75 Comment Length        0000 (0)\n-13A77 Disk Start            0000 (0)\n-13A79 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13A7B Ext File Attributes   00000000 (0)\n-13A7F Local Header Offset   0000520D (21005)\n-13A83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13A83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13AB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13ABA   Length              0005 (5)\n-13ABC   Flags               01 (1) 'Modification'\n-13ABD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13AC1 CENTRAL HEADER #14    02014B50 (33639248)\n-13AC5 Created Zip Spec      14 (20) '2.0'\n-13AC6 Created OS            00 (0) 'MS-DOS'\n-13AC7 Extract Zip Spec      14 (20) '2.0'\n-13AC8 Extract OS            00 (0) 'MS-DOS'\n-13AC9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13ACB Compression Method    0000 (0) 'Stored'\n-13ACD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13AD1 CRC                   00000000 (0)\n-13AD5 Compressed Size       00000000 (0)\n-13AD9 Uncompressed Size     00000000 (0)\n-13ADD Filename Length       0043 (67)\n-13ADF Extra Length          0009 (9)\n-13AE1 Comment Length        0000 (0)\n-13AE3 Disk Start            0000 (0)\n-13AE5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13AE7 Ext File Attributes   00000000 (0)\n-13AEB Local Header Offset   00005269 (21097)\n-13AEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13AEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13B32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13B34   Length              0005 (5)\n-13B36   Flags               01 (1) 'Modification'\n-13B37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13B3B CENTRAL HEADER #15    02014B50 (33639248)\n-13B3F Created Zip Spec      14 (20) '2.0'\n-13B40 Created OS            00 (0) 'MS-DOS'\n-13B41 Extract Zip Spec      14 (20) '2.0'\n-13B42 Extract OS            00 (0) 'MS-DOS'\n-13B43 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13B45 Compression Method    0000 (0) 'Stored'\n-13B47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13B4B CRC                   0701BB57 (117554007)\n-13B4F Compressed Size       00000C33 (3123)\n-13B53 Uncompressed Size     00000C33 (3123)\n-13B57 Filename Length       003C (60)\n-13B59 Extra Length          0009 (9)\n-13B5B Comment Length        0000 (0)\n-13B5D Disk Start            0000 (0)\n-13B5F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13B61 Ext File Attributes   00000000 (0)\n-13B65 Local Header Offset   000052E3 (21219)\n-13B69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13B69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13BA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13BA7   Length              0005 (5)\n-13BA9   Flags               01 (1) 'Modification'\n-13BAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13BAE CENTRAL HEADER #16    02014B50 (33639248)\n-13BB2 Created Zip Spec      14 (20) '2.0'\n-13BB3 Created OS            00 (0) 'MS-DOS'\n-13BB4 Extract Zip Spec      14 (20) '2.0'\n-13BB5 Extract OS            00 (0) 'MS-DOS'\n-13BB6 General Purpose Flag  0000 (0)\n-13BB8 Compression Method    0000 (0) 'Stored'\n-13BBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13BBE CRC                   00000000 (0)\n-13BC2 Compressed Size       00000000 (0)\n-13BC6 Uncompressed Size     00000000 (0)\n-13BCA Filename Length       0004 (4)\n-13BCC Extra Length          0009 (9)\n-13BCE Comment Length        0000 (0)\n-13BD0 Disk Start            0000 (0)\n-13BD2 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13BD4 Ext File Attributes   00000000 (0)\n-13BD8 Local Header Offset   00005F89 (24457)\n-13BDC Filename              'XXXX'\n-#\n-# WARNING: Offset 0x13BDC: Filename 'XXXX'\n-#          Zero length filename\n-#\n-13BE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13BE2   Length              0005 (5)\n-13BE4   Flags               01 (1) 'Modification'\n-13BE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13BE9 CENTRAL HEADER #17    02014B50 (33639248)\n-13BED Created Zip Spec      14 (20) '2.0'\n-13BEE Created OS            00 (0) 'MS-DOS'\n-13BEF Extract Zip Spec      14 (20) '2.0'\n-13BF0 Extract OS            00 (0) 'MS-DOS'\n-13BF1 General Purpose Flag  0000 (0)\n-13BF3 Compression Method    0000 (0) 'Stored'\n-13BF5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13BF9 CRC                   00000000 (0)\n-13BFD Compressed Size       00000000 (0)\n-13C01 Uncompressed Size     00000000 (0)\n-13C05 Filename Length       000B (11)\n-13C07 Extra Length          0009 (9)\n-13C09 Comment Length        0000 (0)\n-13C0B Disk Start            0000 (0)\n-13C0D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13C0F Ext File Attributes   00000000 (0)\n-13C13 Local Header Offset   00005FB4 (24500)\n-13C17 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13C17: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13C22 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13C24   Length              0005 (5)\n-13C26   Flags               01 (1) 'Modification'\n-13C27   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13C2B CENTRAL HEADER #18    02014B50 (33639248)\n-13C2F Created Zip Spec      14 (20) '2.0'\n-13C30 Created OS            00 (0) 'MS-DOS'\n-13C31 Extract Zip Spec      14 (20) '2.0'\n-13C32 Extract OS            00 (0) 'MS-DOS'\n-13C33 General Purpose Flag  0000 (0)\n-13C35 Compression Method    0000 (0) 'Stored'\n-13C37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13C3B CRC                   00000000 (0)\n-13C3F Compressed Size       00000000 (0)\n-13C43 Uncompressed Size     00000000 (0)\n-13C47 Filename Length       0011 (17)\n-13C49 Extra Length          0009 (9)\n-13C4B Comment Length        0000 (0)\n-13C4D Disk Start            0000 (0)\n-13C4F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13C51 Ext File Attributes   00000000 (0)\n-13C55 Local Header Offset   00005FE6 (24550)\n-13C59 Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13C59: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13C6A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13C6C   Length              0005 (5)\n-13C6E   Flags               01 (1) 'Modification'\n-13C6F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13C73 CENTRAL HEADER #19    02014B50 (33639248)\n-13C77 Created Zip Spec      14 (20) '2.0'\n-13C78 Created OS            00 (0) 'MS-DOS'\n-13C79 Extract Zip Spec      14 (20) '2.0'\n-13C7A Extract OS            00 (0) 'MS-DOS'\n-13C7B General Purpose Flag  0000 (0)\n-13C7D Compression Method    0000 (0) 'Stored'\n-13C7F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13C83 CRC                   00000000 (0)\n-13C87 Compressed Size       00000000 (0)\n-13C8B Uncompressed Size     00000000 (0)\n-13C8F Filename Length       001A (26)\n-13C91 Extra Length          0009 (9)\n-13C93 Comment Length        0000 (0)\n-13C95 Disk Start            0000 (0)\n-13C97 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13C99 Ext File Attributes   00000000 (0)\n-13C9D Local Header Offset   0000601E (24606)\n-13CA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13CA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13CBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13CBD   Length              0005 (5)\n-13CBF   Flags               01 (1) 'Modification'\n-13CC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13CC4 CENTRAL HEADER #20    02014B50 (33639248)\n-13CC8 Created Zip Spec      14 (20) '2.0'\n-13CC9 Created OS            00 (0) 'MS-DOS'\n-13CCA Extract Zip Spec      14 (20) '2.0'\n-13CCB Extract OS            00 (0) 'MS-DOS'\n-13CCC General Purpose Flag  0000 (0)\n-13CCE Compression Method    0000 (0) 'Stored'\n-13CD0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13CD4 CRC                   00000000 (0)\n-13CD8 Compressed Size       00000000 (0)\n-13CDC Uncompressed Size     00000000 (0)\n-13CE0 Filename Length       0020 (32)\n-13CE2 Extra Length          0009 (9)\n-13CE4 Comment Length        0000 (0)\n-13CE6 Disk Start            0000 (0)\n-13CE8 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13CEA Ext File Attributes   00000000 (0)\n-13CEE Local Header Offset   0000605F (24671)\n-13CF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13CF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13D12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13D14   Length              0005 (5)\n-13D16   Flags               01 (1) 'Modification'\n-13D17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13D1B CENTRAL HEADER #21    02014B50 (33639248)\n-13D1F Created Zip Spec      14 (20) '2.0'\n-13D20 Created OS            00 (0) 'MS-DOS'\n-13D21 Extract Zip Spec      14 (20) '2.0'\n-13D22 Extract OS            00 (0) 'MS-DOS'\n-13D23 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13D25 Compression Method    0000 (0) 'Stored'\n-13D27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13D2B CRC                   BB0161DF (3137429983)\n-13D2F Compressed Size       00000DF9 (3577)\n-13D33 Uncompressed Size     00000DF9 (3577)\n-13D37 Filename Length       003E (62)\n-13D39 Extra Length          0009 (9)\n-13D3B Comment Length        0000 (0)\n-13D3D Disk Start            0000 (0)\n-13D3F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13D41 Ext File Attributes   00000000 (0)\n-13D45 Local Header Offset   000060A6 (24742)\n-13D49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13D49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13D87 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13D89   Length              0005 (5)\n-13D8B   Flags               01 (1) 'Modification'\n-13D8C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13D90 CENTRAL HEADER #22    02014B50 (33639248)\n-13D94 Created Zip Spec      14 (20) '2.0'\n-13D95 Created OS            00 (0) 'MS-DOS'\n-13D96 Extract Zip Spec      14 (20) '2.0'\n-13D97 Extract OS            00 (0) 'MS-DOS'\n-13D98 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13D9A Compression Method    0000 (0) 'Stored'\n-13D9C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13DA0 CRC                   E2B000EA (3803185386)\n-13DA4 Compressed Size       00005C3B (23611)\n-13DA8 Uncompressed Size     00005C3B (23611)\n-13DAC Filename Length       0032 (50)\n-13DAE Extra Length          0009 (9)\n-13DB0 Comment Length        0000 (0)\n-13DB2 Disk Start            0000 (0)\n-13DB4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13DB6 Ext File Attributes   00000000 (0)\n-13DBA Local Header Offset   00006F14 (28436)\n-13DBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13DBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13DF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13DF2   Length              0005 (5)\n-13DF4   Flags               01 (1) 'Modification'\n-13DF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13DF9 CENTRAL HEADER #23    02014B50 (33639248)\n-13DFD Created Zip Spec      14 (20) '2.0'\n-13DFE Created OS            00 (0) 'MS-DOS'\n-13DFF Extract Zip Spec      14 (20) '2.0'\n-13E00 Extract OS            00 (0) 'MS-DOS'\n-13E01 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13E03 Compression Method    0000 (0) 'Stored'\n-13E05 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13E09 CRC                   A100EF71 (2701193073)\n-13E0D Compressed Size       00000776 (1910)\n-13E11 Uncompressed Size     00000776 (1910)\n-13E15 Filename Length       0039 (57)\n-13E17 Extra Length          0009 (9)\n-13E19 Comment Length        0000 (0)\n-13E1B Disk Start            0000 (0)\n-13E1D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13E1F Ext File Attributes   00000000 (0)\n-13E23 Local Header Offset   0000CBB8 (52152)\n-13E27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13E27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13E60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13E62   Length              0005 (5)\n-13E64   Flags               01 (1) 'Modification'\n-13E65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13E69 CENTRAL HEADER #24    02014B50 (33639248)\n-13E6D Created Zip Spec      14 (20) '2.0'\n-13E6E Created OS            00 (0) 'MS-DOS'\n-13E6F Extract Zip Spec      14 (20) '2.0'\n-13E70 Extract OS            00 (0) 'MS-DOS'\n-13E71 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13E73 Compression Method    0000 (0) 'Stored'\n-13E75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13E79 CRC                   2220AA2B (572566059)\n-13E7D Compressed Size       000016C4 (5828)\n-13E81 Uncompressed Size     000016C4 (5828)\n-13E85 Filename Length       003A (58)\n-13E87 Extra Length          0009 (9)\n-13E89 Comment Length        0000 (0)\n-13E8B Disk Start            0000 (0)\n-13E8D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13E8F Ext File Attributes   00000000 (0)\n-13E93 Local Header Offset   0000D39E (54174)\n-13E97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13E97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13ED1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13ED3   Length              0005 (5)\n-13ED5   Flags               01 (1) 'Modification'\n-13ED6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13EDA CENTRAL HEADER #25    02014B50 (33639248)\n-13EDE Created Zip Spec      14 (20) '2.0'\n-13EDF Created OS            00 (0) 'MS-DOS'\n-13EE0 Extract Zip Spec      14 (20) '2.0'\n-13EE1 Extract OS            00 (0) 'MS-DOS'\n-13EE2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13EE4 Compression Method    0000 (0) 'Stored'\n-13EE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13EEA CRC                   94B18BA4 (2494663588)\n-13EEE Compressed Size       000004D9 (1241)\n-13EF2 Uncompressed Size     000004D9 (1241)\n-13EF6 Filename Length       0041 (65)\n-13EF8 Extra Length          0009 (9)\n-13EFA Comment Length        0000 (0)\n-13EFC Disk Start            0000 (0)\n-13EFE Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13F00 Ext File Attributes   00000000 (0)\n-13F04 Local Header Offset   0000EAD3 (60115)\n-13F08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13F08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13F49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13F4B   Length              0005 (5)\n-13F4D   Flags               01 (1) 'Modification'\n-13F4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13F52 CENTRAL HEADER #26    02014B50 (33639248)\n-13F56 Created Zip Spec      14 (20) '2.0'\n-13F57 Created OS            00 (0) 'MS-DOS'\n-13F58 Extract Zip Spec      14 (20) '2.0'\n-13F59 Extract OS            00 (0) 'MS-DOS'\n-13F5A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13F5C Compression Method    0000 (0) 'Stored'\n-13F5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13F62 CRC                   F3388AB4 (4080569012)\n-13F66 Compressed Size       00001A7B (6779)\n-13F6A Uncompressed Size     00001A7B (6779)\n-13F6E Filename Length       0035 (53)\n-13F70 Extra Length          0009 (9)\n-13F72 Comment Length        0000 (0)\n-13F74 Disk Start            0000 (0)\n-13F76 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13F78 Ext File Attributes   00000000 (0)\n-13F7C Local Header Offset   0000F024 (61476)\n-13F80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13F80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13FB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13FB7   Length              0005 (5)\n-13FB9   Flags               01 (1) 'Modification'\n-13FBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-13FBE CENTRAL HEADER #27    02014B50 (33639248)\n-13FC2 Created Zip Spec      14 (20) '2.0'\n-13FC3 Created OS            00 (0) 'MS-DOS'\n-13FC4 Extract Zip Spec      14 (20) '2.0'\n-13FC5 Extract OS            00 (0) 'MS-DOS'\n-13FC6 General Purpose Flag  0000 (0)\n-13FC8 Compression Method    0000 (0) 'Stored'\n-13FCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13FCE CRC                   00000000 (0)\n-13FD2 Compressed Size       00000000 (0)\n-13FD6 Uncompressed Size     00000000 (0)\n-13FDA Filename Length       0025 (37)\n-13FDC Extra Length          0009 (9)\n-13FDE Comment Length        0000 (0)\n-13FE0 Disk Start            0000 (0)\n-13FE2 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-13FE4 Ext File Attributes   00000000 (0)\n-13FE8 Local Header Offset   00010B0B (68363)\n-13FEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13FEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-14011 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-14013   Length              0005 (5)\n-14015   Flags               01 (1) 'Modification'\n-14016   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1401A CENTRAL HEADER #28    02014B50 (33639248)\n-1401E Created Zip Spec      14 (20) '2.0'\n-1401F Created OS            00 (0) 'MS-DOS'\n-14020 Extract Zip Spec      14 (20) '2.0'\n-14021 Extract OS            00 (0) 'MS-DOS'\n-14022 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-14024 Compression Method    0000 (0) 'Stored'\n-14026 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1402A CRC                   D4BBF170 (3569086832)\n-1402E Compressed Size       00000AB8 (2744)\n-14032 Uncompressed Size     00000AB8 (2744)\n-14036 Filename Length       0041 (65)\n-14038 Extra Length          0009 (9)\n-1403A Comment Length        0000 (0)\n-1403C Disk Start            0000 (0)\n-1403E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-14040 Ext File Attributes   00000000 (0)\n-14044 Local Header Offset   00010B57 (68439)\n-14048 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x14048: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-14089 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1408B   Length              0005 (5)\n-1408D   Flags               01 (1) 'Modification'\n-1408E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-14092 CENTRAL HEADER #29    02014B50 (33639248)\n-14096 Created Zip Spec      14 (20) '2.0'\n-14097 Created OS            00 (0) 'MS-DOS'\n-14098 Extract Zip Spec      14 (20) '2.0'\n-14099 Extract OS            00 (0) 'MS-DOS'\n-1409A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1409C Compression Method    0000 (0) 'Stored'\n-1409E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-140A2 CRC                   76AAEB5B (1990912859)\n-140A6 Compressed Size       00001F41 (8001)\n-140AA Uncompressed Size     00001F41 (8001)\n-140AE Filename Length       0041 (65)\n-140B0 Extra Length          0009 (9)\n-140B2 Comment Length        0000 (0)\n-140B4 Disk Start            0000 (0)\n-140B6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-140B8 Ext File Attributes   00000000 (0)\n-140BC Local Header Offset   00011687 (71303)\n-140C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x140C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-14101 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-14103   Length              0005 (5)\n-14105   Flags               01 (1) 'Modification'\n-14106   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1410A END CENTRAL HEADER    06054B50 (101010256)\n-1410E Number of this disk   0000 (0)\n-14110 Central Dir Disk no   0000 (0)\n-14112 Entries in this disk  001D (29)\n-14114 Total Entries         001D (29)\n-14116 Size of Central Dir   00000ACA (2762)\n-1411A Offset to Central Dir 00013640 (79424)\n-1411E Comment Length        0000 (0)\n+05F27 DATA DESCRIPTOR       08074B50 (134695760)\n+05F2B CRC                   6A8F4F7A (1787776890)\n+05F2F Compressed Size       00000BE1 (3041)\n+05F33 Uncompressed Size     00000BE1 (3041)\n+\n+05F37 LOCAL HEADER #16      04034B50 (67324752)\n+05F3B Extract Zip Spec      14 (20) '2.0'\n+05F3C Extract OS            00 (0) 'MS-DOS'\n+05F3D General Purpose Flag  0000 (0)\n+05F3F Compression Method    0000 (0) 'Stored'\n+05F41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05F45 CRC                   00000000 (0)\n+05F49 Compressed Size       00000000 (0)\n+05F4D Uncompressed Size     00000000 (0)\n+05F51 Filename Length       0004 (4)\n+05F53 Extra Length          0009 (9)\n+05F55 Filename              'XXXX'\n+#\n+# WARNING: Offset 0x5F55: Filename 'XXXX'\n+#          Zero length filename\n+#\n+05F59 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05F5B   Length              0005 (5)\n+05F5D   Flags               01 (1) 'Modification'\n+05F5E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05F62 LOCAL HEADER #17      04034B50 (67324752)\n+05F66 Extract Zip Spec      14 (20) '2.0'\n+05F67 Extract OS            00 (0) 'MS-DOS'\n+05F68 General Purpose Flag  0000 (0)\n+05F6A Compression Method    0000 (0) 'Stored'\n+05F6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05F70 CRC                   00000000 (0)\n+05F74 Compressed Size       00000000 (0)\n+05F78 Uncompressed Size     00000000 (0)\n+05F7C Filename Length       000B (11)\n+05F7E Extra Length          0009 (9)\n+05F80 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F80: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05F8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05F8D   Length              0005 (5)\n+05F8F   Flags               01 (1) 'Modification'\n+05F90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05F94 LOCAL HEADER #18      04034B50 (67324752)\n+05F98 Extract Zip Spec      14 (20) '2.0'\n+05F99 Extract OS            00 (0) 'MS-DOS'\n+05F9A General Purpose Flag  0000 (0)\n+05F9C Compression Method    0000 (0) 'Stored'\n+05F9E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05FA2 CRC                   00000000 (0)\n+05FA6 Compressed Size       00000000 (0)\n+05FAA Uncompressed Size     00000000 (0)\n+05FAE Filename Length       0011 (17)\n+05FB0 Extra Length          0009 (9)\n+05FB2 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FB2: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05FC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05FC5   Length              0005 (5)\n+05FC7   Flags               01 (1) 'Modification'\n+05FC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05FCC LOCAL HEADER #19      04034B50 (67324752)\n+05FD0 Extract Zip Spec      14 (20) '2.0'\n+05FD1 Extract OS            00 (0) 'MS-DOS'\n+05FD2 General Purpose Flag  0000 (0)\n+05FD4 Compression Method    0000 (0) 'Stored'\n+05FD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05FDA CRC                   00000000 (0)\n+05FDE Compressed Size       00000000 (0)\n+05FE2 Uncompressed Size     00000000 (0)\n+05FE6 Filename Length       001A (26)\n+05FE8 Extra Length          0009 (9)\n+05FEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5FEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06004 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06006   Length              0005 (5)\n+06008   Flags               01 (1) 'Modification'\n+06009   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0600D LOCAL HEADER #20      04034B50 (67324752)\n+06011 Extract Zip Spec      14 (20) '2.0'\n+06012 Extract OS            00 (0) 'MS-DOS'\n+06013 General Purpose Flag  0000 (0)\n+06015 Compression Method    0000 (0) 'Stored'\n+06017 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0601B CRC                   00000000 (0)\n+0601F Compressed Size       00000000 (0)\n+06023 Uncompressed Size     00000000 (0)\n+06027 Filename Length       0020 (32)\n+06029 Extra Length          0009 (9)\n+0602B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x602B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0604B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0604D   Length              0005 (5)\n+0604F   Flags               01 (1) 'Modification'\n+06050   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+06054 LOCAL HEADER #21      04034B50 (67324752)\n+06058 Extract Zip Spec      14 (20) '2.0'\n+06059 Extract OS            00 (0) 'MS-DOS'\n+0605A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0605C Compression Method    0000 (0) 'Stored'\n+0605E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06062 CRC                   00000000 (0)\n+06066 Compressed Size       00000000 (0)\n+0606A Uncompressed Size     00000000 (0)\n+0606E Filename Length       003E (62)\n+06070 Extra Length          0009 (9)\n+06072 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6072: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+060B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+060B2   Length              0005 (5)\n+060B4   Flags               01 (1) 'Modification'\n+060B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+060B9 PAYLOAD\n+\n+06F09 DATA DESCRIPTOR       08074B50 (134695760)\n+06F0D CRC                   EDC5D490 (3989165200)\n+06F11 Compressed Size       00000E50 (3664)\n+06F15 Uncompressed Size     00000E50 (3664)\n+\n+06F19 LOCAL HEADER #22      04034B50 (67324752)\n+06F1D Extract Zip Spec      14 (20) '2.0'\n+06F1E Extract OS            00 (0) 'MS-DOS'\n+06F1F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+06F21 Compression Method    0000 (0) 'Stored'\n+06F23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06F27 CRC                   00000000 (0)\n+06F2B Compressed Size       00000000 (0)\n+06F2F Uncompressed Size     00000000 (0)\n+06F33 Filename Length       0032 (50)\n+06F35 Extra Length          0009 (9)\n+06F37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6F37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06F69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06F6B   Length              0005 (5)\n+06F6D   Flags               01 (1) 'Modification'\n+06F6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06F72 PAYLOAD\n+\n+0CE1D DATA DESCRIPTOR       08074B50 (134695760)\n+0CE21 CRC                   F6A25F0D (4137836301)\n+0CE25 Compressed Size       00005EAB (24235)\n+0CE29 Uncompressed Size     00005EAB (24235)\n+\n+0CE2D LOCAL HEADER #23      04034B50 (67324752)\n+0CE31 Extract Zip Spec      14 (20) '2.0'\n+0CE32 Extract OS            00 (0) 'MS-DOS'\n+0CE33 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0CE35 Compression Method    0000 (0) 'Stored'\n+0CE37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CE3B CRC                   00000000 (0)\n+0CE3F Compressed Size       00000000 (0)\n+0CE43 Uncompressed Size     00000000 (0)\n+0CE47 Filename Length       0039 (57)\n+0CE49 Extra Length          0009 (9)\n+0CE4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCE4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CE84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CE86   Length              0005 (5)\n+0CE88   Flags               01 (1) 'Modification'\n+0CE89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CE8D PAYLOAD\n+\n+0D634 DATA DESCRIPTOR       08074B50 (134695760)\n+0D638 CRC                   8E75DF39 (2390089529)\n+0D63C Compressed Size       000007A7 (1959)\n+0D640 Uncompressed Size     000007A7 (1959)\n+\n+0D644 LOCAL HEADER #24      04034B50 (67324752)\n+0D648 Extract Zip Spec      14 (20) '2.0'\n+0D649 Extract OS            00 (0) 'MS-DOS'\n+0D64A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0D64C Compression Method    0000 (0) 'Stored'\n+0D64E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D652 CRC                   00000000 (0)\n+0D656 Compressed Size       00000000 (0)\n+0D65A Uncompressed Size     00000000 (0)\n+0D65E Filename Length       003A (58)\n+0D660 Extra Length          0009 (9)\n+0D662 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD662: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D69C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D69E   Length              0005 (5)\n+0D6A0   Flags               01 (1) 'Modification'\n+0D6A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D6A5 PAYLOAD\n+\n+0EE03 DATA DESCRIPTOR       08074B50 (134695760)\n+0EE07 CRC                   6AA8E21B (1789452827)\n+0EE0B Compressed Size       0000175E (5982)\n+0EE0F Uncompressed Size     0000175E (5982)\n+\n+0EE13 LOCAL HEADER #25      04034B50 (67324752)\n+0EE17 Extract Zip Spec      14 (20) '2.0'\n+0EE18 Extract OS            00 (0) 'MS-DOS'\n+0EE19 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0EE1B Compression Method    0000 (0) 'Stored'\n+0EE1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EE21 CRC                   00000000 (0)\n+0EE25 Compressed Size       00000000 (0)\n+0EE29 Uncompressed Size     00000000 (0)\n+0EE2D Filename Length       0041 (65)\n+0EE2F Extra Length          0009 (9)\n+0EE31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEE31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EE72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EE74   Length              0005 (5)\n+0EE76   Flags               01 (1) 'Modification'\n+0EE77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EE7B PAYLOAD\n+\n+0F375 DATA DESCRIPTOR       08074B50 (134695760)\n+0F379 CRC                   22BB3DD7 (582696407)\n+0F37D Compressed Size       000004FA (1274)\n+0F381 Uncompressed Size     000004FA (1274)\n+\n+0F385 LOCAL HEADER #26      04034B50 (67324752)\n+0F389 Extract Zip Spec      14 (20) '2.0'\n+0F38A Extract OS            00 (0) 'MS-DOS'\n+0F38B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0F38D Compression Method    0000 (0) 'Stored'\n+0F38F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F393 CRC                   00000000 (0)\n+0F397 Compressed Size       00000000 (0)\n+0F39B Uncompressed Size     00000000 (0)\n+0F39F Filename Length       0035 (53)\n+0F3A1 Extra Length          0009 (9)\n+0F3A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF3A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F3D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F3DA   Length              0005 (5)\n+0F3DC   Flags               01 (1) 'Modification'\n+0F3DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F3E1 PAYLOAD\n+\n+10F46 DATA DESCRIPTOR       08074B50 (134695760)\n+10F4A CRC                   B2C3D88B (2999179403)\n+10F4E Compressed Size       00001B65 (7013)\n+10F52 Uncompressed Size     00001B65 (7013)\n+\n+10F56 LOCAL HEADER #27      04034B50 (67324752)\n+10F5A Extract Zip Spec      14 (20) '2.0'\n+10F5B Extract OS            00 (0) 'MS-DOS'\n+10F5C General Purpose Flag  0000 (0)\n+10F5E Compression Method    0000 (0) 'Stored'\n+10F60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10F64 CRC                   00000000 (0)\n+10F68 Compressed Size       00000000 (0)\n+10F6C Uncompressed Size     00000000 (0)\n+10F70 Filename Length       0025 (37)\n+10F72 Extra Length          0009 (9)\n+10F74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10F74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10F99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10F9B   Length              0005 (5)\n+10F9D   Flags               01 (1) 'Modification'\n+10F9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+10FA2 LOCAL HEADER #28      04034B50 (67324752)\n+10FA6 Extract Zip Spec      14 (20) '2.0'\n+10FA7 Extract OS            00 (0) 'MS-DOS'\n+10FA8 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+10FAA Compression Method    0000 (0) 'Stored'\n+10FAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10FB0 CRC                   00000000 (0)\n+10FB4 Compressed Size       00000000 (0)\n+10FB8 Uncompressed Size     00000000 (0)\n+10FBC Filename Length       0041 (65)\n+10FBE Extra Length          0009 (9)\n+10FC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10FC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11001 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11003   Length              0005 (5)\n+11005   Flags               01 (1) 'Modification'\n+11006   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1100A PAYLOAD\n+\n+11B05 DATA DESCRIPTOR       08074B50 (134695760)\n+11B09 CRC                   E8B12001 (3903922177)\n+11B0D Compressed Size       00000AFB (2811)\n+11B11 Uncompressed Size     00000AFB (2811)\n+\n+11B15 LOCAL HEADER #29      04034B50 (67324752)\n+11B19 Extract Zip Spec      14 (20) '2.0'\n+11B1A Extract OS            00 (0) 'MS-DOS'\n+11B1B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+11B1D Compression Method    0000 (0) 'Stored'\n+11B1F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11B23 CRC                   00000000 (0)\n+11B27 Compressed Size       00000000 (0)\n+11B2B Uncompressed Size     00000000 (0)\n+11B2F Filename Length       0041 (65)\n+11B31 Extra Length          0009 (9)\n+11B33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11B33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11B74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11B76   Length              0005 (5)\n+11B78   Flags               01 (1) 'Modification'\n+11B79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11B7D PAYLOAD\n+\n+13B7B DATA DESCRIPTOR       08074B50 (134695760)\n+13B7F CRC                   0823E298 (136569496)\n+13B83 Compressed Size       00001FFE (8190)\n+13B87 Uncompressed Size     00001FFE (8190)\n+\n+13B8B CENTRAL HEADER #1     02014B50 (33639248)\n+13B8F Created Zip Spec      14 (20) '2.0'\n+13B90 Created OS            00 (0) 'MS-DOS'\n+13B91 Extract Zip Spec      14 (20) '2.0'\n+13B92 Extract OS            00 (0) 'MS-DOS'\n+13B93 General Purpose Flag  0000 (0)\n+13B95 Compression Method    0000 (0) 'Stored'\n+13B97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13B9B CRC                   00000000 (0)\n+13B9F Compressed Size       00000000 (0)\n+13BA3 Uncompressed Size     00000000 (0)\n+13BA7 Filename Length       0009 (9)\n+13BA9 Extra Length          0009 (9)\n+13BAB Comment Length        0000 (0)\n+13BAD Disk Start            0000 (0)\n+13BAF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13BB1 Ext File Attributes   00000000 (0)\n+13BB5 Local Header Offset   00000000 (0)\n+13BB9 Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x13BB9: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+13BC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13BC4   Length              0005 (5)\n+13BC6   Flags               01 (1) 'Modification'\n+13BC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13BCB CENTRAL HEADER #2     02014B50 (33639248)\n+13BCF Created Zip Spec      14 (20) '2.0'\n+13BD0 Created OS            00 (0) 'MS-DOS'\n+13BD1 Extract Zip Spec      14 (20) '2.0'\n+13BD2 Extract OS            00 (0) 'MS-DOS'\n+13BD3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13BD5 Compression Method    0000 (0) 'Stored'\n+13BD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13BDB CRC                   3C2DFD2C (1009646892)\n+13BDF Compressed Size       00002069 (8297)\n+13BE3 Uncompressed Size     00002069 (8297)\n+13BE7 Filename Length       0015 (21)\n+13BE9 Extra Length          0009 (9)\n+13BEB Comment Length        0000 (0)\n+13BED Disk Start            0000 (0)\n+13BEF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13BF1 Ext File Attributes   00000000 (0)\n+13BF5 Local Header Offset   00000030 (48)\n+13BF9 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13BF9: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13C0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13C10   Length              0005 (5)\n+13C12   Flags               01 (1) 'Modification'\n+13C13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13C17 CENTRAL HEADER #3     02014B50 (33639248)\n+13C1B Created Zip Spec      14 (20) '2.0'\n+13C1C Created OS            00 (0) 'MS-DOS'\n+13C1D Extract Zip Spec      14 (20) '2.0'\n+13C1E Extract OS            00 (0) 'MS-DOS'\n+13C1F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13C21 Compression Method    0000 (0) 'Stored'\n+13C23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13C27 CRC                   86E2B4B4 (2263004340)\n+13C2B Compressed Size       00002C5E (11358)\n+13C2F Uncompressed Size     00002C5E (11358)\n+13C33 Filename Length       0010 (16)\n+13C35 Extra Length          0009 (9)\n+13C37 Comment Length        0000 (0)\n+13C39 Disk Start            0000 (0)\n+13C3B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13C3D Ext File Attributes   00000000 (0)\n+13C41 Local Header Offset   000020E5 (8421)\n+13C45 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13C45: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13C55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13C57   Length              0005 (5)\n+13C59   Flags               01 (1) 'Modification'\n+13C5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13C5E CENTRAL HEADER #4     02014B50 (33639248)\n+13C62 Created Zip Spec      14 (20) '2.0'\n+13C63 Created OS            00 (0) 'MS-DOS'\n+13C64 Extract Zip Spec      14 (20) '2.0'\n+13C65 Extract OS            00 (0) 'MS-DOS'\n+13C66 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13C68 Compression Method    0000 (0) 'Stored'\n+13C6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13C6E CRC                   EE027FB2 (3993141170)\n+13C72 Compressed Size       00000019 (25)\n+13C76 Uncompressed Size     00000019 (25)\n+13C7A Filename Length       0014 (20)\n+13C7C Extra Length          0009 (9)\n+13C7E Comment Length        0000 (0)\n+13C80 Disk Start            0000 (0)\n+13C82 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13C84 Ext File Attributes   00000000 (0)\n+13C88 Local Header Offset   00004D8A (19850)\n+13C8C Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13C8C: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13CA0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13CA2   Length              0005 (5)\n+13CA4   Flags               01 (1) 'Modification'\n+13CA5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13CA9 CENTRAL HEADER #5     02014B50 (33639248)\n+13CAD Created Zip Spec      14 (20) '2.0'\n+13CAE Created OS            00 (0) 'MS-DOS'\n+13CAF Extract Zip Spec      14 (20) '2.0'\n+13CB0 Extract OS            00 (0) 'MS-DOS'\n+13CB1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13CB3 Compression Method    0000 (0) 'Stored'\n+13CB5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13CB9 CRC                   CE04F4D7 (3456431319)\n+13CBD Compressed Size       000000B1 (177)\n+13CC1 Uncompressed Size     000000B1 (177)\n+13CC5 Filename Length       000F (15)\n+13CC7 Extra Length          0009 (9)\n+13CC9 Comment Length        0000 (0)\n+13CCB Disk Start            0000 (0)\n+13CCD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13CCF Ext File Attributes   00000000 (0)\n+13CD3 Local Header Offset   00004DEE (19950)\n+13CD7 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13CD7: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13CE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13CE8   Length              0005 (5)\n+13CEA   Flags               01 (1) 'Modification'\n+13CEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13CEF CENTRAL HEADER #6     02014B50 (33639248)\n+13CF3 Created Zip Spec      14 (20) '2.0'\n+13CF4 Created OS            00 (0) 'MS-DOS'\n+13CF5 Extract Zip Spec      14 (20) '2.0'\n+13CF6 Extract OS            00 (0) 'MS-DOS'\n+13CF7 General Purpose Flag  0000 (0)\n+13CF9 Compression Method    0000 (0) 'Stored'\n+13CFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13CFF CRC                   00000000 (0)\n+13D03 Compressed Size       00000000 (0)\n+13D07 Uncompressed Size     00000000 (0)\n+13D0B Filename Length       000F (15)\n+13D0D Extra Length          0009 (9)\n+13D0F Comment Length        0000 (0)\n+13D11 Disk Start            0000 (0)\n+13D13 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13D15 Ext File Attributes   00000000 (0)\n+13D19 Local Header Offset   00004EE5 (20197)\n+13D1D Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13D1D: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13D2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13D2E   Length              0005 (5)\n+13D30   Flags               01 (1) 'Modification'\n+13D31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13D35 CENTRAL HEADER #7     02014B50 (33639248)\n+13D39 Created Zip Spec      14 (20) '2.0'\n+13D3A Created OS            00 (0) 'MS-DOS'\n+13D3B Extract Zip Spec      14 (20) '2.0'\n+13D3C Extract OS            00 (0) 'MS-DOS'\n+13D3D General Purpose Flag  0000 (0)\n+13D3F Compression Method    0000 (0) 'Stored'\n+13D41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13D45 CRC                   00000000 (0)\n+13D49 Compressed Size       00000000 (0)\n+13D4D Uncompressed Size     00000000 (0)\n+13D51 Filename Length       0018 (24)\n+13D53 Extra Length          0009 (9)\n+13D55 Comment Length        0000 (0)\n+13D57 Disk Start            0000 (0)\n+13D59 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13D5B Ext File Attributes   00000000 (0)\n+13D5F Local Header Offset   00004F1B (20251)\n+13D63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13D63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13D7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13D7D   Length              0005 (5)\n+13D7F   Flags               01 (1) 'Modification'\n+13D80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13D84 CENTRAL HEADER #8     02014B50 (33639248)\n+13D88 Created Zip Spec      14 (20) '2.0'\n+13D89 Created OS            00 (0) 'MS-DOS'\n+13D8A Extract Zip Spec      14 (20) '2.0'\n+13D8B Extract OS            00 (0) 'MS-DOS'\n+13D8C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13D8E Compression Method    0000 (0) 'Stored'\n+13D90 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13D94 CRC                   9217B46E (2451027054)\n+13D98 Compressed Size       0000003A (58)\n+13D9C Uncompressed Size     0000003A (58)\n+13DA0 Filename Length       0041 (65)\n+13DA2 Extra Length          0009 (9)\n+13DA4 Comment Length        0000 (0)\n+13DA6 Disk Start            0000 (0)\n+13DA8 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13DAA Ext File Attributes   00000000 (0)\n+13DAE Local Header Offset   00004F5A (20314)\n+13DB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13DB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13DF3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13DF5   Length              0005 (5)\n+13DF7   Flags               01 (1) 'Modification'\n+13DF8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13DFC CENTRAL HEADER #9     02014B50 (33639248)\n+13E00 Created Zip Spec      14 (20) '2.0'\n+13E01 Created OS            00 (0) 'MS-DOS'\n+13E02 Extract Zip Spec      14 (20) '2.0'\n+13E03 Extract OS            00 (0) 'MS-DOS'\n+13E04 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13E06 Compression Method    0000 (0) 'Stored'\n+13E08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13E0C CRC                   E5088BE5 (3842542565)\n+13E10 Compressed Size       0000003B (59)\n+13E14 Uncompressed Size     0000003B (59)\n+13E18 Filename Length       0049 (73)\n+13E1A Extra Length          0009 (9)\n+13E1C Comment Length        0000 (0)\n+13E1E Disk Start            0000 (0)\n+13E20 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13E22 Ext File Attributes   00000000 (0)\n+13E26 Local Header Offset   0000500C (20492)\n+13E2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13E2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13E73 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13E75   Length              0005 (5)\n+13E77   Flags               01 (1) 'Modification'\n+13E78   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13E7C CENTRAL HEADER #10    02014B50 (33639248)\n+13E80 Created Zip Spec      14 (20) '2.0'\n+13E81 Created OS            00 (0) 'MS-DOS'\n+13E82 Extract Zip Spec      14 (20) '2.0'\n+13E83 Extract OS            00 (0) 'MS-DOS'\n+13E84 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13E86 Compression Method    0000 (0) 'Stored'\n+13E88 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13E8C CRC                   C0B5B005 (3233132549)\n+13E90 Compressed Size       00000042 (66)\n+13E94 Uncompressed Size     00000042 (66)\n+13E98 Filename Length       0050 (80)\n+13E9A Extra Length          0009 (9)\n+13E9C Comment Length        0000 (0)\n+13E9E Disk Start            0000 (0)\n+13EA0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13EA2 Ext File Attributes   00000000 (0)\n+13EA6 Local Header Offset   000050C7 (20679)\n+13EAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13EAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13EFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13EFC   Length              0005 (5)\n+13EFE   Flags               01 (1) 'Modification'\n+13EFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13F03 CENTRAL HEADER #11    02014B50 (33639248)\n+13F07 Created Zip Spec      14 (20) '2.0'\n+13F08 Created OS            00 (0) 'MS-DOS'\n+13F09 Extract Zip Spec      14 (20) '2.0'\n+13F0A Extract OS            00 (0) 'MS-DOS'\n+13F0B General Purpose Flag  0000 (0)\n+13F0D Compression Method    0000 (0) 'Stored'\n+13F0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13F13 CRC                   00000000 (0)\n+13F17 Compressed Size       00000000 (0)\n+13F1B Uncompressed Size     00000000 (0)\n+13F1F Filename Length       000F (15)\n+13F21 Extra Length          0009 (9)\n+13F23 Comment Length        0000 (0)\n+13F25 Disk Start            0000 (0)\n+13F27 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13F29 Ext File Attributes   00000000 (0)\n+13F2D Local Header Offset   00005190 (20880)\n+13F31 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13F31: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13F40 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13F42   Length              0005 (5)\n+13F44   Flags               01 (1) 'Modification'\n+13F45   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13F49 CENTRAL HEADER #12    02014B50 (33639248)\n+13F4D Created Zip Spec      14 (20) '2.0'\n+13F4E Created OS            00 (0) 'MS-DOS'\n+13F4F Extract Zip Spec      14 (20) '2.0'\n+13F50 Extract OS            00 (0) 'MS-DOS'\n+13F51 General Purpose Flag  0000 (0)\n+13F53 Compression Method    0000 (0) 'Stored'\n+13F55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13F59 CRC                   00000000 (0)\n+13F5D Compressed Size       00000000 (0)\n+13F61 Uncompressed Size     00000000 (0)\n+13F65 Filename Length       0020 (32)\n+13F67 Extra Length          0009 (9)\n+13F69 Comment Length        0000 (0)\n+13F6B Disk Start            0000 (0)\n+13F6D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13F6F Ext File Attributes   00000000 (0)\n+13F73 Local Header Offset   000051C6 (20934)\n+13F77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13F77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13F97 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13F99   Length              0005 (5)\n+13F9B   Flags               01 (1) 'Modification'\n+13F9C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13FA0 CENTRAL HEADER #13    02014B50 (33639248)\n+13FA4 Created Zip Spec      14 (20) '2.0'\n+13FA5 Created OS            00 (0) 'MS-DOS'\n+13FA6 Extract Zip Spec      14 (20) '2.0'\n+13FA7 Extract OS            00 (0) 'MS-DOS'\n+13FA8 General Purpose Flag  0000 (0)\n+13FAA Compression Method    0000 (0) 'Stored'\n+13FAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13FB0 CRC                   00000000 (0)\n+13FB4 Compressed Size       00000000 (0)\n+13FB8 Uncompressed Size     00000000 (0)\n+13FBC Filename Length       0035 (53)\n+13FBE Extra Length          0009 (9)\n+13FC0 Comment Length        0000 (0)\n+13FC2 Disk Start            0000 (0)\n+13FC4 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+13FC6 Ext File Attributes   00000000 (0)\n+13FCA Local Header Offset   0000520D (21005)\n+13FCE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13FCE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14003 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14005   Length              0005 (5)\n+14007   Flags               01 (1) 'Modification'\n+14008   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1400C CENTRAL HEADER #14    02014B50 (33639248)\n+14010 Created Zip Spec      14 (20) '2.0'\n+14011 Created OS            00 (0) 'MS-DOS'\n+14012 Extract Zip Spec      14 (20) '2.0'\n+14013 Extract OS            00 (0) 'MS-DOS'\n+14014 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+14016 Compression Method    0000 (0) 'Stored'\n+14018 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1401C CRC                   00000000 (0)\n+14020 Compressed Size       00000000 (0)\n+14024 Uncompressed Size     00000000 (0)\n+14028 Filename Length       0043 (67)\n+1402A Extra Length          0009 (9)\n+1402C Comment Length        0000 (0)\n+1402E Disk Start            0000 (0)\n+14030 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+14032 Ext File Attributes   00000000 (0)\n+14036 Local Header Offset   00005269 (21097)\n+1403A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1403A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1407D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1407F   Length              0005 (5)\n+14081   Flags               01 (1) 'Modification'\n+14082   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+14086 CENTRAL HEADER #15    02014B50 (33639248)\n+1408A Created Zip Spec      14 (20) '2.0'\n+1408B Created OS            00 (0) 'MS-DOS'\n+1408C Extract Zip Spec      14 (20) '2.0'\n+1408D Extract OS            00 (0) 'MS-DOS'\n+1408E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+14090 Compression Method    0000 (0) 'Stored'\n+14092 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14096 CRC                   6A8F4F7A (1787776890)\n+1409A Compressed Size       00000BE1 (3041)\n+1409E Uncompressed Size     00000BE1 (3041)\n+140A2 Filename Length       003C (60)\n+140A4 Extra Length          0009 (9)\n+140A6 Comment Length        0000 (0)\n+140A8 Disk Start            0000 (0)\n+140AA Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+140AC Ext File Attributes   00000000 (0)\n+140B0 Local Header Offset   000052E3 (21219)\n+140B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x140B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+140F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+140F2   Length              0005 (5)\n+140F4   Flags               01 (1) 'Modification'\n+140F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+140F9 CENTRAL HEADER #16    02014B50 (33639248)\n+140FD Created Zip Spec      14 (20) '2.0'\n+140FE Created OS            00 (0) 'MS-DOS'\n+140FF Extract Zip Spec      14 (20) '2.0'\n+14100 Extract OS            00 (0) 'MS-DOS'\n+14101 General Purpose Flag  0000 (0)\n+14103 Compression Method    0000 (0) 'Stored'\n+14105 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14109 CRC                   00000000 (0)\n+1410D Compressed Size       00000000 (0)\n+14111 Uncompressed Size     00000000 (0)\n+14115 Filename Length       0004 (4)\n+14117 Extra Length          0009 (9)\n+14119 Comment Length        0000 (0)\n+1411B Disk Start            0000 (0)\n+1411D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1411F Ext File Attributes   00000000 (0)\n+14123 Local Header Offset   00005F37 (24375)\n+14127 Filename              'XXXX'\n+#\n+# WARNING: Offset 0x14127: Filename 'XXXX'\n+#          Zero length filename\n+#\n+1412B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1412D   Length              0005 (5)\n+1412F   Flags               01 (1) 'Modification'\n+14130   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+14134 CENTRAL HEADER #17    02014B50 (33639248)\n+14138 Created Zip Spec      14 (20) '2.0'\n+14139 Created OS            00 (0) 'MS-DOS'\n+1413A Extract Zip Spec      14 (20) '2.0'\n+1413B Extract OS            00 (0) 'MS-DOS'\n+1413C General Purpose Flag  0000 (0)\n+1413E Compression Method    0000 (0) 'Stored'\n+14140 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14144 CRC                   00000000 (0)\n+14148 Compressed Size       00000000 (0)\n+1414C Uncompressed Size     00000000 (0)\n+14150 Filename Length       000B (11)\n+14152 Extra Length          0009 (9)\n+14154 Comment Length        0000 (0)\n+14156 Disk Start            0000 (0)\n+14158 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1415A Ext File Attributes   00000000 (0)\n+1415E Local Header Offset   00005F62 (24418)\n+14162 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14162: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1416D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1416F   Length              0005 (5)\n+14171   Flags               01 (1) 'Modification'\n+14172   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+14176 CENTRAL HEADER #18    02014B50 (33639248)\n+1417A Created Zip Spec      14 (20) '2.0'\n+1417B Created OS            00 (0) 'MS-DOS'\n+1417C Extract Zip Spec      14 (20) '2.0'\n+1417D Extract OS            00 (0) 'MS-DOS'\n+1417E General Purpose Flag  0000 (0)\n+14180 Compression Method    0000 (0) 'Stored'\n+14182 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14186 CRC                   00000000 (0)\n+1418A Compressed Size       00000000 (0)\n+1418E Uncompressed Size     00000000 (0)\n+14192 Filename Length       0011 (17)\n+14194 Extra Length          0009 (9)\n+14196 Comment Length        0000 (0)\n+14198 Disk Start            0000 (0)\n+1419A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1419C Ext File Attributes   00000000 (0)\n+141A0 Local Header Offset   00005F94 (24468)\n+141A4 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x141A4: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+141B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+141B7   Length              0005 (5)\n+141B9   Flags               01 (1) 'Modification'\n+141BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+141BE CENTRAL HEADER #19    02014B50 (33639248)\n+141C2 Created Zip Spec      14 (20) '2.0'\n+141C3 Created OS            00 (0) 'MS-DOS'\n+141C4 Extract Zip Spec      14 (20) '2.0'\n+141C5 Extract OS            00 (0) 'MS-DOS'\n+141C6 General Purpose Flag  0000 (0)\n+141C8 Compression Method    0000 (0) 'Stored'\n+141CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+141CE CRC                   00000000 (0)\n+141D2 Compressed Size       00000000 (0)\n+141D6 Uncompressed Size     00000000 (0)\n+141DA Filename Length       001A (26)\n+141DC Extra Length          0009 (9)\n+141DE Comment Length        0000 (0)\n+141E0 Disk Start            0000 (0)\n+141E2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+141E4 Ext File Attributes   00000000 (0)\n+141E8 Local Header Offset   00005FCC (24524)\n+141EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x141EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14206 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14208   Length              0005 (5)\n+1420A   Flags               01 (1) 'Modification'\n+1420B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1420F CENTRAL HEADER #20    02014B50 (33639248)\n+14213 Created Zip Spec      14 (20) '2.0'\n+14214 Created OS            00 (0) 'MS-DOS'\n+14215 Extract Zip Spec      14 (20) '2.0'\n+14216 Extract OS            00 (0) 'MS-DOS'\n+14217 General Purpose Flag  0000 (0)\n+14219 Compression Method    0000 (0) 'Stored'\n+1421B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1421F CRC                   00000000 (0)\n+14223 Compressed Size       00000000 (0)\n+14227 Uncompressed Size     00000000 (0)\n+1422B Filename Length       0020 (32)\n+1422D Extra Length          0009 (9)\n+1422F Comment Length        0000 (0)\n+14231 Disk Start            0000 (0)\n+14233 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+14235 Ext File Attributes   00000000 (0)\n+14239 Local Header Offset   0000600D (24589)\n+1423D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1423D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1425D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1425F   Length              0005 (5)\n+14261   Flags               01 (1) 'Modification'\n+14262   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+14266 CENTRAL HEADER #21    02014B50 (33639248)\n+1426A Created Zip Spec      14 (20) '2.0'\n+1426B Created OS            00 (0) 'MS-DOS'\n+1426C Extract Zip Spec      14 (20) '2.0'\n+1426D Extract OS            00 (0) 'MS-DOS'\n+1426E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+14270 Compression Method    0000 (0) 'Stored'\n+14272 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14276 CRC                   EDC5D490 (3989165200)\n+1427A Compressed Size       00000E50 (3664)\n+1427E Uncompressed Size     00000E50 (3664)\n+14282 Filename Length       003E (62)\n+14284 Extra Length          0009 (9)\n+14286 Comment Length        0000 (0)\n+14288 Disk Start            0000 (0)\n+1428A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1428C Ext File Attributes   00000000 (0)\n+14290 Local Header Offset   00006054 (24660)\n+14294 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14294: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+142D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+142D4   Length              0005 (5)\n+142D6   Flags               01 (1) 'Modification'\n+142D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+142DB CENTRAL HEADER #22    02014B50 (33639248)\n+142DF Created Zip Spec      14 (20) '2.0'\n+142E0 Created OS            00 (0) 'MS-DOS'\n+142E1 Extract Zip Spec      14 (20) '2.0'\n+142E2 Extract OS            00 (0) 'MS-DOS'\n+142E3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+142E5 Compression Method    0000 (0) 'Stored'\n+142E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+142EB CRC                   F6A25F0D (4137836301)\n+142EF Compressed Size       00005EAB (24235)\n+142F3 Uncompressed Size     00005EAB (24235)\n+142F7 Filename Length       0032 (50)\n+142F9 Extra Length          0009 (9)\n+142FB Comment Length        0000 (0)\n+142FD Disk Start            0000 (0)\n+142FF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+14301 Ext File Attributes   00000000 (0)\n+14305 Local Header Offset   00006F19 (28441)\n+14309 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14309: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1433B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1433D   Length              0005 (5)\n+1433F   Flags               01 (1) 'Modification'\n+14340   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+14344 CENTRAL HEADER #23    02014B50 (33639248)\n+14348 Created Zip Spec      14 (20) '2.0'\n+14349 Created OS            00 (0) 'MS-DOS'\n+1434A Extract Zip Spec      14 (20) '2.0'\n+1434B Extract OS            00 (0) 'MS-DOS'\n+1434C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1434E Compression Method    0000 (0) 'Stored'\n+14350 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14354 CRC                   8E75DF39 (2390089529)\n+14358 Compressed Size       000007A7 (1959)\n+1435C Uncompressed Size     000007A7 (1959)\n+14360 Filename Length       0039 (57)\n+14362 Extra Length          0009 (9)\n+14364 Comment Length        0000 (0)\n+14366 Disk Start            0000 (0)\n+14368 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1436A Ext File Attributes   00000000 (0)\n+1436E Local Header Offset   0000CE2D (52781)\n+14372 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14372: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+143AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+143AD   Length              0005 (5)\n+143AF   Flags               01 (1) 'Modification'\n+143B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+143B4 CENTRAL HEADER #24    02014B50 (33639248)\n+143B8 Created Zip Spec      14 (20) '2.0'\n+143B9 Created OS            00 (0) 'MS-DOS'\n+143BA Extract Zip Spec      14 (20) '2.0'\n+143BB Extract OS            00 (0) 'MS-DOS'\n+143BC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+143BE Compression Method    0000 (0) 'Stored'\n+143C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+143C4 CRC                   6AA8E21B (1789452827)\n+143C8 Compressed Size       0000175E (5982)\n+143CC Uncompressed Size     0000175E (5982)\n+143D0 Filename Length       003A (58)\n+143D2 Extra Length          0009 (9)\n+143D4 Comment Length        0000 (0)\n+143D6 Disk Start            0000 (0)\n+143D8 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+143DA Ext File Attributes   00000000 (0)\n+143DE Local Header Offset   0000D644 (54852)\n+143E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x143E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1441C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1441E   Length              0005 (5)\n+14420   Flags               01 (1) 'Modification'\n+14421   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+14425 CENTRAL HEADER #25    02014B50 (33639248)\n+14429 Created Zip Spec      14 (20) '2.0'\n+1442A Created OS            00 (0) 'MS-DOS'\n+1442B Extract Zip Spec      14 (20) '2.0'\n+1442C Extract OS            00 (0) 'MS-DOS'\n+1442D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1442F Compression Method    0000 (0) 'Stored'\n+14431 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14435 CRC                   22BB3DD7 (582696407)\n+14439 Compressed Size       000004FA (1274)\n+1443D Uncompressed Size     000004FA (1274)\n+14441 Filename Length       0041 (65)\n+14443 Extra Length          0009 (9)\n+14445 Comment Length        0000 (0)\n+14447 Disk Start            0000 (0)\n+14449 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1444B Ext File Attributes   00000000 (0)\n+1444F Local Header Offset   0000EE13 (60947)\n+14453 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14453: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14494 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14496   Length              0005 (5)\n+14498   Flags               01 (1) 'Modification'\n+14499   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1449D CENTRAL HEADER #26    02014B50 (33639248)\n+144A1 Created Zip Spec      14 (20) '2.0'\n+144A2 Created OS            00 (0) 'MS-DOS'\n+144A3 Extract Zip Spec      14 (20) '2.0'\n+144A4 Extract OS            00 (0) 'MS-DOS'\n+144A5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+144A7 Compression Method    0000 (0) 'Stored'\n+144A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+144AD CRC                   B2C3D88B (2999179403)\n+144B1 Compressed Size       00001B65 (7013)\n+144B5 Uncompressed Size     00001B65 (7013)\n+144B9 Filename Length       0035 (53)\n+144BB Extra Length          0009 (9)\n+144BD Comment Length        0000 (0)\n+144BF Disk Start            0000 (0)\n+144C1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+144C3 Ext File Attributes   00000000 (0)\n+144C7 Local Header Offset   0000F385 (62341)\n+144CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x144CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14500 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14502   Length              0005 (5)\n+14504   Flags               01 (1) 'Modification'\n+14505   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+14509 CENTRAL HEADER #27    02014B50 (33639248)\n+1450D Created Zip Spec      14 (20) '2.0'\n+1450E Created OS            00 (0) 'MS-DOS'\n+1450F Extract Zip Spec      14 (20) '2.0'\n+14510 Extract OS            00 (0) 'MS-DOS'\n+14511 General Purpose Flag  0000 (0)\n+14513 Compression Method    0000 (0) 'Stored'\n+14515 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14519 CRC                   00000000 (0)\n+1451D Compressed Size       00000000 (0)\n+14521 Uncompressed Size     00000000 (0)\n+14525 Filename Length       0025 (37)\n+14527 Extra Length          0009 (9)\n+14529 Comment Length        0000 (0)\n+1452B Disk Start            0000 (0)\n+1452D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1452F Ext File Attributes   00000000 (0)\n+14533 Local Header Offset   00010F56 (69462)\n+14537 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14537: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1455C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1455E   Length              0005 (5)\n+14560   Flags               01 (1) 'Modification'\n+14561   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+14565 CENTRAL HEADER #28    02014B50 (33639248)\n+14569 Created Zip Spec      14 (20) '2.0'\n+1456A Created OS            00 (0) 'MS-DOS'\n+1456B Extract Zip Spec      14 (20) '2.0'\n+1456C Extract OS            00 (0) 'MS-DOS'\n+1456D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1456F Compression Method    0000 (0) 'Stored'\n+14571 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14575 CRC                   E8B12001 (3903922177)\n+14579 Compressed Size       00000AFB (2811)\n+1457D Uncompressed Size     00000AFB (2811)\n+14581 Filename Length       0041 (65)\n+14583 Extra Length          0009 (9)\n+14585 Comment Length        0000 (0)\n+14587 Disk Start            0000 (0)\n+14589 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1458B Ext File Attributes   00000000 (0)\n+1458F Local Header Offset   00010FA2 (69538)\n+14593 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14593: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+145D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+145D6   Length              0005 (5)\n+145D8   Flags               01 (1) 'Modification'\n+145D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+145DD CENTRAL HEADER #29    02014B50 (33639248)\n+145E1 Created Zip Spec      14 (20) '2.0'\n+145E2 Created OS            00 (0) 'MS-DOS'\n+145E3 Extract Zip Spec      14 (20) '2.0'\n+145E4 Extract OS            00 (0) 'MS-DOS'\n+145E5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+145E7 Compression Method    0000 (0) 'Stored'\n+145E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+145ED CRC                   0823E298 (136569496)\n+145F1 Compressed Size       00001FFE (8190)\n+145F5 Uncompressed Size     00001FFE (8190)\n+145F9 Filename Length       0041 (65)\n+145FB Extra Length          0009 (9)\n+145FD Comment Length        0000 (0)\n+145FF Disk Start            0000 (0)\n+14601 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+14603 Ext File Attributes   00000000 (0)\n+14607 Local Header Offset   00011B15 (72469)\n+1460B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1460B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1464C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1464E   Length              0005 (5)\n+14650   Flags               01 (1) 'Modification'\n+14651   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+14655 END CENTRAL HEADER    06054B50 (101010256)\n+14659 Number of this disk   0000 (0)\n+1465B Central Dir Disk no   0000 (0)\n+1465D Entries in this disk  001D (29)\n+1465F Total Entries         001D (29)\n+14661 Size of Central Dir   00000ACA (2762)\n+14665 Offset to Central Dir 00013B8B (80779)\n+14669 Comment Length        0000 (0)\n #\n # Warning Count: 58\n #\n # Done\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-registry-nacos/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-registry-nacos/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,196 +1,191 @@\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 6e61 636f 733c  -registry-nacos<\n-00000520: 2f61 7274 6966 6163 7449 643e 0d0a 2020  /artifactId>..  \n-00000530: 3c76 6572 7369 6f6e 3e32 2e37 2e31 303c  <version>2.7.10<\n-00000540: 2f76 6572 7369 6f6e 3e0d 0a20 203c 6e61  /version>..  <na\n-00000550: 6d65 3e24 7b70 726f 6a65 6374 2e61 7274  me>${project.art\n-00000560: 6966 6163 7449 647d 3c2f 6e61 6d65 3e0d  ifactId}</name>.\n-00000570: 0a20 203c 6465 7363 7269 7074 696f 6e3e  .  <description>\n-00000580: 5468 6520 4e61 636f 7320 7265 6769 7374  The Nacos regist\n-00000590: 7279 206d 6f64 756c 6520 6f66 2044 7562  ry module of Dub\n-000005a0: 626f 2070 726f 6a65 6374 3c2f 6465 7363  bo project</desc\n-000005b0: 7269 7074 696f 6e3e 0d0a 2020 3c6c 6963  ription>..  <lic\n-000005c0: 656e 7365 733e 0d0a 2020 2020 3c6c 6963  enses>..    <lic\n-000005d0: 656e 7365 3e0d 0a20 2020 2020 203c 6e61  ense>..      <na\n-000005e0: 6d65 3e41 7061 6368 6520 4c69 6365 6e73  me>Apache Licens\n-000005f0: 652c 2056 6572 7369 6f6e 2032 2e30 3c2f  e, Version 2.0</\n-00000600: 6e61 6d65 3e0d 0a20 2020 2020 203c 7572  name>..      <ur\n-00000610: 6c3e 6874 7470 3a2f 2f77 7777 2e61 7061  l>http://www.apa\n-00000620: 6368 652e 6f72 672f 6c69 6365 6e73 6573  che.org/licenses\n-00000630: 2f4c 4943 454e 5345 2d32 2e30 3c2f 7572  /LICENSE-2.0</ur\n-00000640: 6c3e 0d0a 2020 2020 2020 3c64 6973 7472  l>..      <distr\n-00000650: 6962 7574 696f 6e3e 7265 706f 3c2f 6469  ibution>repo</di\n-00000660: 7374 7269 6275 7469 6f6e 3e0d 0a20 2020  stribution>..   \n-00000670: 203c 2f6c 6963 656e 7365 3e0d 0a20 203c   </license>..  <\n-00000680: 2f6c 6963 656e 7365 733e 0d0a 2020 3c64  /licenses>..  <d\n-00000690: 6570 656e 6465 6e63 6965 733e 0d0a 2020  ependencies>..  \n-000006a0: 2020 3c64 6570 656e 6465 6e63 793e 0d0a    <dependency>..\n-000006b0: 2020 2020 2020 3c67 726f 7570 4964 3e6f        <groupId>o\n-000006c0: 7267 2e61 7061 6368 652e 6475 6262 6f3c  rg.apache.dubbo<\n-000006d0: 2f67 726f 7570 4964 3e0d 0a20 2020 2020  /groupId>..     \n-000006e0: 203c 6172 7469 6661 6374 4964 3e64 7562   <artifactId>dub\n-000006f0: 626f 2d72 6567 6973 7472 792d 6170 693c  bo-registry-api<\n-00000700: 2f61 7274 6966 6163 7449 643e 0d0a 2020  /artifactId>..  \n-00000710: 2020 2020 3c76 6572 7369 6f6e 3e24 7b70      <version>${p\n-00000720: 726f 6a65 6374 2e76 6572 7369 6f6e 7d3c  roject.version}<\n-00000730: 2f76 6572 7369 6f6e 3e0d 0a20 2020 203c  /version>..    <\n-00000740: 2f64 6570 656e 6465 6e63 793e 0d0a 2020  /dependency>..  \n-00000750: 2020 3c64 6570 656e 6465 6e63 793e 0d0a    <dependency>..\n-00000760: 2020 2020 2020 3c67 726f 7570 4964 3e6f        <groupId>o\n-00000770: 7267 2e61 7061 6368 652e 6475 6262 6f3c  rg.apache.dubbo<\n-00000780: 2f67 726f 7570 4964 3e0d 0a20 2020 2020  /groupId>..     \n-00000790: 203c 6172 7469 6661 6374 4964 3e64 7562   <artifactId>dub\n-000007a0: 626f 2d63 6f6d 6d6f 6e3c 2f61 7274 6966  bo-common</artif\n-000007b0: 6163 7449 643e 0d0a 2020 2020 2020 3c76  actId>..      <v\n-000007c0: 6572 7369 6f6e 3e24 7b70 726f 6a65 6374  ersion>${project\n-000007d0: 2e76 6572 7369 6f6e 7d3c 2f76 6572 7369  .version}</versi\n-000007e0: 6f6e 3e0d 0a20 2020 203c 2f64 6570 656e  on>..    </depen\n-000007f0: 6465 6e63 793e 0d0a 2020 2020 3c64 6570  dency>..    <dep\n-00000800: 656e 6465 6e63 793e 0d0a 2020 2020 2020  endency>..      \n-00000810: 3c67 726f 7570 4964 3e63 6f6d 2e61 6c69  <groupId>com.ali\n-00000820: 6261 6261 2e6e 6163 6f73 3c2f 6772 6f75  baba.nacos</grou\n-00000830: 7049 643e 0d0a 2020 2020 2020 3c61 7274  pId>..      <art\n-00000840: 6966 6163 7449 643e 6e61 636f 732d 636c  ifactId>nacos-cl\n-00000850: 6965 6e74 3c2f 6172 7469 6661 6374 4964  ient</artifactId\n-00000860: 3e0d 0a20 2020 203c 2f64 6570 656e 6465  >..    </depende\n-00000870: 6e63 793e 0d0a 2020 2020 3c64 6570 656e  ncy>..    <depen\n-00000880: 6465 6e63 793e 0d0a 2020 2020 2020 3c67  dency>..      <g\n-00000890: 726f 7570 4964 3e6f 7267 2e61 7061 6368  roupId>org.apach\n-000008a0: 652e 6475 6262 6f3c 2f67 726f 7570 4964  e.dubbo</groupId\n-000008b0: 3e0d 0a20 2020 2020 203c 6172 7469 6661  >..      <artifa\n-000008c0: 6374 4964 3e64 7562 626f 2d73 6572 6961  ctId>dubbo-seria\n-000008d0: 6c69 7a61 7469 6f6e 2d68 6573 7369 616e  lization-hessian\n-000008e0: 323c 2f61 7274 6966 6163 7449 643e 0d0a  2</artifactId>..\n-000008f0: 2020 2020 2020 3c76 6572 7369 6f6e 3e24        <version>$\n-00000900: 7b70 726f 6a65 6374 2e76 6572 7369 6f6e  {project.version\n-00000910: 7d3c 2f76 6572 7369 6f6e 3e0d 0a20 2020  }</version>..   \n-00000920: 2020 203c 7363 6f70 653e 7465 7374 3c2f     <scope>test</\n-00000930: 7363 6f70 653e 0d0a 2020 2020 3c2f 6465  scope>..    </de\n-00000940: 7065 6e64 656e 6379 3e0d 0a20 2020 203c  pendency>..    <\n-00000950: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-00000960: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n-00000970: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n-00000980: 6f75 7049 643e 0d0a 2020 2020 2020 3c61  oupId>..      <a\n-00000990: 7274 6966 6163 7449 643e 6475 6262 6f2d  rtifactId>dubbo-\n-000009a0: 7270 632d 6475 6262 6f3c 2f61 7274 6966  rpc-dubbo</artif\n-000009b0: 6163 7449 643e 0d0a 2020 2020 2020 3c76  actId>..      <v\n-000009c0: 6572 7369 6f6e 3e24 7b70 726f 6a65 6374  ersion>${project\n-000009d0: 2e76 6572 7369 6f6e 7d3c 2f76 6572 7369  .version}</versi\n-000009e0: 6f6e 3e0d 0a20 2020 2020 203c 7363 6f70  on>..      <scop\n-000009f0: 653e 7465 7374 3c2f 7363 6f70 653e 0d0a  e>test</scope>..\n-00000a00: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n-00000a10: 3e0d 0a20 2020 203c 6465 7065 6e64 656e  >..    <dependen\n-00000a20: 6379 3e0d 0a20 2020 2020 203c 6772 6f75  cy>..      <grou\n-00000a30: 7049 643e 6f72 672e 6170 6163 6865 2e64  pId>org.apache.d\n-00000a40: 7562 626f 3c2f 6772 6f75 7049 643e 0d0a  ubbo</groupId>..\n-00000a50: 2020 2020 2020 3c61 7274 6966 6163 7449        <artifactI\n-00000a60: 643e 6475 6262 6f2d 7265 6d6f 7469 6e67  d>dubbo-remoting\n-00000a70: 2d6e 6574 7479 343c 2f61 7274 6966 6163  -netty4</artifac\n-00000a80: 7449 643e 0d0a 2020 2020 2020 3c76 6572  tId>..      <ver\n-00000a90: 7369 6f6e 3e24 7b70 726f 6a65 6374 2e76  sion>${project.v\n-00000aa0: 6572 7369 6f6e 7d3c 2f76 6572 7369 6f6e  ersion}</version\n-00000ab0: 3e0d 0a20 2020 2020 203c 7363 6f70 653e  >..      <scope>\n-00000ac0: 7465 7374 3c2f 7363 6f70 653e 0d0a 2020  test</scope>..  \n-00000ad0: 2020 3c2f 6465 7065 6e64 656e 6379 3e0d    </dependency>.\n-00000ae0: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n-00000af0: 3e0d 0a20 2020 2020 203c 6772 6f75 7049  >..      <groupI\n-00000b00: 643e 6368 2e71 6f73 2e6c 6f67 6261 636b  d>ch.qos.logback\n-00000b10: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-00000b20: 2020 3c61 7274 6966 6163 7449 643e 6c6f    <artifactId>lo\n-00000b30: 6762 6163 6b2d 636c 6173 7369 633c 2f61  gback-classic</a\n-00000b40: 7274 6966 6163 7449 643e 0d0a 2020 2020  rtifactId>..    \n-00000b50: 2020 3c73 636f 7065 3e74 6573 743c 2f73    <scope>test</s\n-00000b60: 636f 7065 3e0d 0a20 2020 203c 2f64 6570  cope>..    </dep\n-00000b70: 656e 6465 6e63 793e 0d0a 2020 2020 3c64  endency>..    <d\n-00000b80: 6570 656e 6465 6e63 793e 0d0a 2020 2020  ependency>..    \n-00000b90: 2020 3c67 726f 7570 4964 3e6f 7267 2e73    <groupId>org.s\n-00000ba0: 7072 696e 6766 7261 6d65 776f 726b 3c2f  pringframework</\n-00000bb0: 6772 6f75 7049 643e 0d0a 2020 2020 2020  groupId>..      \n-00000bc0: 3c61 7274 6966 6163 7449 643e 7370 7269  <artifactId>spri\n-00000bd0: 6e67 2d74 6573 743c 2f61 7274 6966 6163  ng-test</artifac\n-00000be0: 7449 643e 0d0a 2020 2020 2020 3c73 636f  tId>..      <sco\n-00000bf0: 7065 3e74 6573 743c 2f73 636f 7065 3e0d  pe>test</scope>.\n-00000c00: 0a20 2020 203c 2f64 6570 656e 6465 6e63  .    </dependenc\n-00000c10: 793e 0d0a 2020 3c2f 6465 7065 6e64 656e  y>..  </dependen\n-00000c20: 6369 6573 3e0d 0a3c 2f70 726f 6a65 6374  cies>..</project\n-00000c30: 3e0d 0a                                  >..\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: 6e61 636f 733c 2f61 7274 6966 6163 7449  nacos</artifactI\n+00000510: 643e 0a20 203c 7665 7273 696f 6e3e 322e  d>.  <version>2.\n+00000520: 372e 3130 3c2f 7665 7273 696f 6e3e 0a20  7.10</version>. \n+00000530: 203c 6e61 6d65 3e24 7b70 726f 6a65 6374   <name>${project\n+00000540: 2e61 7274 6966 6163 7449 647d 3c2f 6e61  .artifactId}</na\n+00000550: 6d65 3e0a 2020 3c64 6573 6372 6970 7469  me>.  <descripti\n+00000560: 6f6e 3e54 6865 204e 6163 6f73 2072 6567  on>The Nacos reg\n+00000570: 6973 7472 7920 6d6f 6475 6c65 206f 6620  istry module of \n+00000580: 4475 6262 6f20 7072 6f6a 6563 743c 2f64  Dubbo project</d\n+00000590: 6573 6372 6970 7469 6f6e 3e0a 2020 3c6c  escription>.  <l\n+000005a0: 6963 656e 7365 733e 0a20 2020 203c 6c69  icenses>.    <li\n+000005b0: 6365 6e73 653e 0a20 2020 2020 203c 6e61  cense>.      <na\n+000005c0: 6d65 3e41 7061 6368 6520 4c69 6365 6e73  me>Apache Licens\n+000005d0: 652c 2056 6572 7369 6f6e 2032 2e30 3c2f  e, Version 2.0</\n+000005e0: 6e61 6d65 3e0a 2020 2020 2020 3c75 726c  name>.      <url\n+000005f0: 3e68 7474 703a 2f2f 7777 772e 6170 6163  >http://www.apac\n+00000600: 6865 2e6f 7267 2f6c 6963 656e 7365 732f  he.org/licenses/\n+00000610: 4c49 4345 4e53 452d 322e 303c 2f75 726c  LICENSE-2.0</url\n+00000620: 3e0a 2020 2020 2020 3c64 6973 7472 6962  >.      <distrib\n+00000630: 7574 696f 6e3e 7265 706f 3c2f 6469 7374  ution>repo</dist\n+00000640: 7269 6275 7469 6f6e 3e0a 2020 2020 3c2f  ribution>.    </\n+00000650: 6c69 6365 6e73 653e 0a20 203c 2f6c 6963  license>.  </lic\n+00000660: 656e 7365 733e 0a20 203c 6465 7065 6e64  enses>.  <depend\n+00000670: 656e 6369 6573 3e0a 2020 2020 3c64 6570  encies>.    <dep\n+00000680: 656e 6465 6e63 793e 0a20 2020 2020 203c  endency>.      <\n+00000690: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n+000006a0: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n+000006b0: 643e 0a20 2020 2020 203c 6172 7469 6661  d>.      <artifa\n+000006c0: 6374 4964 3e64 7562 626f 2d72 6567 6973  ctId>dubbo-regis\n+000006d0: 7472 792d 6170 693c 2f61 7274 6966 6163  try-api</artifac\n+000006e0: 7449 643e 0a20 2020 2020 203c 7665 7273  tId>.      <vers\n+000006f0: 696f 6e3e 247b 7072 6f6a 6563 742e 7665  ion>${project.ve\n+00000700: 7273 696f 6e7d 3c2f 7665 7273 696f 6e3e  rsion}</version>\n+00000710: 0a20 2020 203c 2f64 6570 656e 6465 6e63  .    </dependenc\n+00000720: 793e 0a20 2020 203c 6465 7065 6e64 656e  y>.    <dependen\n+00000730: 6379 3e0a 2020 2020 2020 3c67 726f 7570  cy>.      <group\n+00000740: 4964 3e6f 7267 2e61 7061 6368 652e 6475  Id>org.apache.du\n+00000750: 6262 6f3c 2f67 726f 7570 4964 3e0a 2020  bbo</groupId>.  \n+00000760: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n+00000770: 6475 6262 6f2d 636f 6d6d 6f6e 3c2f 6172  dubbo-common</ar\n+00000780: 7469 6661 6374 4964 3e0a 2020 2020 2020  tifactId>.      \n+00000790: 3c76 6572 7369 6f6e 3e24 7b70 726f 6a65  <version>${proje\n+000007a0: 6374 2e76 6572 7369 6f6e 7d3c 2f76 6572  ct.version}</ver\n+000007b0: 7369 6f6e 3e0a 2020 2020 3c2f 6465 7065  sion>.    </depe\n+000007c0: 6e64 656e 6379 3e0a 2020 2020 3c64 6570  ndency>.    <dep\n+000007d0: 656e 6465 6e63 793e 0a20 2020 2020 203c  endency>.      <\n+000007e0: 6772 6f75 7049 643e 636f 6d2e 616c 6962  groupId>com.alib\n+000007f0: 6162 612e 6e61 636f 733c 2f67 726f 7570  aba.nacos</group\n+00000800: 4964 3e0a 2020 2020 2020 3c61 7274 6966  Id>.      <artif\n+00000810: 6163 7449 643e 6e61 636f 732d 636c 6965  actId>nacos-clie\n+00000820: 6e74 3c2f 6172 7469 6661 6374 4964 3e0a  nt</artifactId>.\n+00000830: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n+00000840: 3e0a 2020 2020 3c64 6570 656e 6465 6e63  >.    <dependenc\n+00000850: 793e 0a20 2020 2020 203c 6772 6f75 7049  y>.      <groupI\n+00000860: 643e 6f72 672e 6170 6163 6865 2e64 7562  d>org.apache.dub\n+00000870: 626f 3c2f 6772 6f75 7049 643e 0a20 2020  bo</groupId>.   \n+00000880: 2020 203c 6172 7469 6661 6374 4964 3e64     <artifactId>d\n+00000890: 7562 626f 2d73 6572 6961 6c69 7a61 7469  ubbo-serializati\n+000008a0: 6f6e 2d68 6573 7369 616e 323c 2f61 7274  on-hessian2</art\n+000008b0: 6966 6163 7449 643e 0a20 2020 2020 203c  ifactId>.      <\n+000008c0: 7665 7273 696f 6e3e 247b 7072 6f6a 6563  version>${projec\n+000008d0: 742e 7665 7273 696f 6e7d 3c2f 7665 7273  t.version}</vers\n+000008e0: 696f 6e3e 0a20 2020 2020 203c 7363 6f70  ion>.      <scop\n+000008f0: 653e 7465 7374 3c2f 7363 6f70 653e 0a20  e>test</scope>. \n+00000900: 2020 203c 2f64 6570 656e 6465 6e63 793e     </dependency>\n+00000910: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n+00000920: 3e0a 2020 2020 2020 3c67 726f 7570 4964  >.      <groupId\n+00000930: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n+00000940: 6f3c 2f67 726f 7570 4964 3e0a 2020 2020  o</groupId>.    \n+00000950: 2020 3c61 7274 6966 6163 7449 643e 6475    <artifactId>du\n+00000960: 6262 6f2d 7270 632d 6475 6262 6f3c 2f61  bbo-rpc-dubbo</a\n+00000970: 7274 6966 6163 7449 643e 0a20 2020 2020  rtifactId>.     \n+00000980: 203c 7665 7273 696f 6e3e 247b 7072 6f6a   <version>${proj\n+00000990: 6563 742e 7665 7273 696f 6e7d 3c2f 7665  ect.version}</ve\n+000009a0: 7273 696f 6e3e 0a20 2020 2020 203c 7363  rsion>.      <sc\n+000009b0: 6f70 653e 7465 7374 3c2f 7363 6f70 653e  ope>test</scope>\n+000009c0: 0a20 2020 203c 2f64 6570 656e 6465 6e63  .    </dependenc\n+000009d0: 793e 0a20 2020 203c 6465 7065 6e64 656e  y>.    <dependen\n+000009e0: 6379 3e0a 2020 2020 2020 3c67 726f 7570  cy>.      <group\n+000009f0: 4964 3e6f 7267 2e61 7061 6368 652e 6475  Id>org.apache.du\n+00000a00: 6262 6f3c 2f67 726f 7570 4964 3e0a 2020  bbo</groupId>.  \n+00000a10: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n+00000a20: 6475 6262 6f2d 7265 6d6f 7469 6e67 2d6e  dubbo-remoting-n\n+00000a30: 6574 7479 343c 2f61 7274 6966 6163 7449  etty4</artifactI\n+00000a40: 643e 0a20 2020 2020 203c 7665 7273 696f  d>.      <versio\n+00000a50: 6e3e 247b 7072 6f6a 6563 742e 7665 7273  n>${project.vers\n+00000a60: 696f 6e7d 3c2f 7665 7273 696f 6e3e 0a20  ion}</version>. \n+00000a70: 2020 2020 203c 7363 6f70 653e 7465 7374       <scope>test\n+00000a80: 3c2f 7363 6f70 653e 0a20 2020 203c 2f64  </scope>.    </d\n+00000a90: 6570 656e 6465 6e63 793e 0a20 2020 203c  ependency>.    <\n+00000aa0: 6465 7065 6e64 656e 6379 3e0a 2020 2020  dependency>.    \n+00000ab0: 2020 3c67 726f 7570 4964 3e63 682e 716f    <groupId>ch.qo\n+00000ac0: 732e 6c6f 6762 6163 6b3c 2f67 726f 7570  s.logback</group\n+00000ad0: 4964 3e0a 2020 2020 2020 3c61 7274 6966  Id>.      <artif\n+00000ae0: 6163 7449 643e 6c6f 6762 6163 6b2d 636c  actId>logback-cl\n+00000af0: 6173 7369 633c 2f61 7274 6966 6163 7449  assic</artifactI\n+00000b00: 643e 0a20 2020 2020 203c 7363 6f70 653e  d>.      <scope>\n+00000b10: 7465 7374 3c2f 7363 6f70 653e 0a20 2020  test</scope>.   \n+00000b20: 203c 2f64 6570 656e 6465 6e63 793e 0a20   </dependency>. \n+00000b30: 2020 203c 6465 7065 6e64 656e 6379 3e0a     <dependency>.\n+00000b40: 2020 2020 2020 3c67 726f 7570 4964 3e6f        <groupId>o\n+00000b50: 7267 2e73 7072 696e 6766 7261 6d65 776f  rg.springframewo\n+00000b60: 726b 3c2f 6772 6f75 7049 643e 0a20 2020  rk</groupId>.   \n+00000b70: 2020 203c 6172 7469 6661 6374 4964 3e73     <artifactId>s\n+00000b80: 7072 696e 672d 7465 7374 3c2f 6172 7469  pring-test</arti\n+00000b90: 6661 6374 4964 3e0a 2020 2020 2020 3c73  factId>.      <s\n+00000ba0: 636f 7065 3e74 6573 743c 2f73 636f 7065  cope>test</scope\n+00000bb0: 3e0a 2020 2020 3c2f 6465 7065 6e64 656e  >.    </dependen\n+00000bc0: 6379 3e0a 2020 3c2f 6465 7065 6e64 656e  cy>.  </dependen\n+00000bd0: 6369 6573 3e0a 3c2f 7072 6f6a 6563 743e  cies>.</project>\n+00000be0: 0a                                       .\n"}, {"source1": "org/apache/dubbo/registry/nacos/NacosNamingServiceWrapper.java", "source2": "org/apache/dubbo/registry/nacos/NacosNamingServiceWrapper.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,87 +1,87 @@\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.nacos;\n-\n-import com.alibaba.nacos.api.exception.NacosException;\n-import com.alibaba.nacos.api.naming.NamingService;\n-import com.alibaba.nacos.api.naming.listener.EventListener;\n-import com.alibaba.nacos.api.naming.pojo.Instance;\n-import com.alibaba.nacos.api.naming.pojo.ListView;\n-\n-import java.util.List;\n-\n-public class NacosNamingServiceWrapper {\n-\n-    private static final String INNERCLASS_SYMBOL = \"$\";\n-\n-    private static final String INNERCLASS_COMPATIBLE_SYMBOL = \"___\";\n-\n-    private NamingService namingService;\n-\n-    public NacosNamingServiceWrapper(NamingService namingService) {\n-        this.namingService = namingService;\n-    }\n-\n-\n-    public String getServerStatus() {\n-        return namingService.getServerStatus();\n-    }\n-\n-    public void subscribe(String serviceName, EventListener eventListener) throws NacosException {\n-        namingService.subscribe(handleInnerSymbol(serviceName), eventListener);\n-    }\n-\n-    public void subscribe(String serviceName, String group, EventListener eventListener) throws NacosException {\n-        namingService.subscribe(handleInnerSymbol(serviceName), group, eventListener);\n-    }\n-\n-    public List<Instance> getAllInstances(String serviceName, String group) throws NacosException {\n-        return namingService.getAllInstances(handleInnerSymbol(serviceName), group);\n-    }\n-\n-    public void registerInstance(String serviceName, String group, Instance instance) throws NacosException {\n-        namingService.registerInstance(handleInnerSymbol(serviceName), group, instance);\n-    }\n-\n-    public void deregisterInstance(String serviceName, String group, String ip, int port) throws NacosException {\n-        namingService.deregisterInstance(handleInnerSymbol(serviceName), group, ip, port);\n-    }\n-\n-\n-    public void deregisterInstance(String serviceName, String group, Instance instance) throws NacosException {\n-        namingService.deregisterInstance(handleInnerSymbol(serviceName), group, instance);\n-    }\n-\n-    public ListView<String> getServicesOfServer(int pageNo, int pageSize, String parameter) throws NacosException {\n-        return namingService.getServicesOfServer(pageNo, pageSize, parameter);\n-    }\n-\n-    public List<Instance> selectInstances(String serviceName, boolean healthy) throws NacosException {\n-        return namingService.selectInstances(handleInnerSymbol(serviceName), healthy);\n-    }\n-\n-    /**\n-     * see https://github.com/apache/dubbo/issues/7129\n-     * nacos service name just support `0-9a-zA-Z-._:`, grpc interface is inner interface, need compatible.\n-     */\n-    private String handleInnerSymbol(String serviceName) {\n-        if (serviceName == null) {\n-            return null;\n-        }\n-        return serviceName.replace(INNERCLASS_SYMBOL, INNERCLASS_COMPATIBLE_SYMBOL);\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.nacos;\r\n+\r\n+import com.alibaba.nacos.api.exception.NacosException;\r\n+import com.alibaba.nacos.api.naming.NamingService;\r\n+import com.alibaba.nacos.api.naming.listener.EventListener;\r\n+import com.alibaba.nacos.api.naming.pojo.Instance;\r\n+import com.alibaba.nacos.api.naming.pojo.ListView;\r\n+\r\n+import java.util.List;\r\n+\r\n+public class NacosNamingServiceWrapper {\r\n+\r\n+    private static final String INNERCLASS_SYMBOL = \"$\";\r\n+\r\n+    private static final String INNERCLASS_COMPATIBLE_SYMBOL = \"___\";\r\n+\r\n+    private NamingService namingService;\r\n+\r\n+    public NacosNamingServiceWrapper(NamingService namingService) {\r\n+        this.namingService = namingService;\r\n+    }\r\n+\r\n+\r\n+    public String getServerStatus() {\r\n+        return namingService.getServerStatus();\r\n+    }\r\n+\r\n+    public void subscribe(String serviceName, EventListener eventListener) throws NacosException {\r\n+        namingService.subscribe(handleInnerSymbol(serviceName), eventListener);\r\n+    }\r\n+\r\n+    public void subscribe(String serviceName, String group, EventListener eventListener) throws NacosException {\r\n+        namingService.subscribe(handleInnerSymbol(serviceName), group, eventListener);\r\n+    }\r\n+\r\n+    public List<Instance> getAllInstances(String serviceName, String group) throws NacosException {\r\n+        return namingService.getAllInstances(handleInnerSymbol(serviceName), group);\r\n+    }\r\n+\r\n+    public void registerInstance(String serviceName, String group, Instance instance) throws NacosException {\r\n+        namingService.registerInstance(handleInnerSymbol(serviceName), group, instance);\r\n+    }\r\n+\r\n+    public void deregisterInstance(String serviceName, String group, String ip, int port) throws NacosException {\r\n+        namingService.deregisterInstance(handleInnerSymbol(serviceName), group, ip, port);\r\n+    }\r\n+\r\n+\r\n+    public void deregisterInstance(String serviceName, String group, Instance instance) throws NacosException {\r\n+        namingService.deregisterInstance(handleInnerSymbol(serviceName), group, instance);\r\n+    }\r\n+\r\n+    public ListView<String> getServicesOfServer(int pageNo, int pageSize, String parameter) throws NacosException {\r\n+        return namingService.getServicesOfServer(pageNo, pageSize, parameter);\r\n+    }\r\n+\r\n+    public List<Instance> selectInstances(String serviceName, boolean healthy) throws NacosException {\r\n+        return namingService.selectInstances(handleInnerSymbol(serviceName), healthy);\r\n+    }\r\n+\r\n+    /**\r\n+     * see https://github.com/apache/dubbo/issues/7129\r\n+     * nacos service name just support `0-9a-zA-Z-._:`, grpc interface is inner interface, need compatible.\r\n+     */\r\n+    private String handleInnerSymbol(String serviceName) {\r\n+        if (serviceName == null) {\r\n+            return null;\r\n+        }\r\n+        return serviceName.replace(INNERCLASS_SYMBOL, INNERCLASS_COMPATIBLE_SYMBOL);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/nacos/NacosRegistry.java", "source2": "org/apache/dubbo/registry/nacos/NacosRegistry.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,624 +1,624 @@\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.nacos;\n-\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.URLBuilder;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.common.utils.UrlUtils;\n-import org.apache.dubbo.registry.NotifyListener;\n-import org.apache.dubbo.registry.Registry;\n-import org.apache.dubbo.registry.nacos.util.NacosInstanceManageUtil;\n-import org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils;\n-import org.apache.dubbo.registry.support.FailbackRegistry;\n-\n-import com.alibaba.nacos.api.common.Constants;\n-import com.alibaba.nacos.api.exception.NacosException;\n-import com.alibaba.nacos.api.naming.NamingService;\n-import com.alibaba.nacos.api.naming.listener.EventListener;\n-import com.alibaba.nacos.api.naming.listener.NamingEvent;\n-import com.alibaba.nacos.api.naming.pojo.Instance;\n-import com.alibaba.nacos.api.naming.pojo.ListView;\n-import com.google.common.collect.Lists;\n-\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.Collection;\n-import java.util.HashMap;\n-import java.util.LinkedHashSet;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.concurrent.Executors;\n-import java.util.concurrent.ScheduledExecutorService;\n-import java.util.concurrent.TimeUnit;\n-import java.util.stream.Collectors;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.common.constants.RegistryConstants.CATEGORY_KEY;\n-import static org.apache.dubbo.common.constants.RegistryConstants.CONFIGURATORS_CATEGORY;\n-import static org.apache.dubbo.common.constants.RegistryConstants.CONSUMERS_CATEGORY;\n-import static org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_CATEGORY;\n-import static org.apache.dubbo.common.constants.RegistryConstants.EMPTY_PROTOCOL;\n-import static org.apache.dubbo.common.constants.RegistryConstants.PROVIDERS_CATEGORY;\n-import static org.apache.dubbo.common.constants.RegistryConstants.ROUTERS_CATEGORY;\n-import static org.apache.dubbo.registry.Constants.ADMIN_PROTOCOL;\n-import static org.apache.dubbo.registry.nacos.NacosServiceName.valueOf;\n-\n-/**\n- * Nacos {@link Registry}\n- *\n- * @see #SERVICE_NAME_SEPARATOR\n- * @see #PAGINATION_SIZE\n- * @see #LOOKUP_INTERVAL\n- * @since 2.6.5\n- */\n-public class NacosRegistry extends FailbackRegistry {\n-\n-    /**\n-     * All supported categories\n-     */\n-    private static final List<String> ALL_SUPPORTED_CATEGORIES = Arrays.asList(\n-            PROVIDERS_CATEGORY,\n-            CONSUMERS_CATEGORY,\n-            ROUTERS_CATEGORY,\n-            CONFIGURATORS_CATEGORY\n-    );\n-\n-    private static final int CATEGORY_INDEX = 0;\n-\n-    private static final int SERVICE_INTERFACE_INDEX = 1;\n-\n-    private static final int SERVICE_VERSION_INDEX = 2;\n-\n-    private static final int SERVICE_GROUP_INDEX = 3;\n-\n-    private static final String WILDCARD = \"*\";\n-\n-    /**\n-     * The separator for service name\n-     * Change a constant to be configurable, it's designed for Windows file name that is compatible with old\n-     * Nacos binary release(< 0.6.1)\n-     */\n-    private static final String SERVICE_NAME_SEPARATOR = System.getProperty(\"nacos.service.name.separator\", \":\");\n-\n-    /**\n-     * The pagination size of query for Nacos service names(only for Dubbo-OPS)\n-     */\n-    private static final int PAGINATION_SIZE = Integer.getInteger(\"nacos.service.names.pagination.size\", 100);\n-\n-    /**\n-     * The interval in second of lookup Nacos service names(only for Dubbo-OPS)\n-     */\n-    private static final long LOOKUP_INTERVAL = Long.getLong(\"nacos.service.names.lookup.interval\", 30);\n-\n-    /**\n-     * {@link ScheduledExecutorService} lookup Nacos service names(only for Dubbo-OPS)\n-     */\n-    private volatile ScheduledExecutorService scheduledExecutorService;\n-\n-    private final NacosNamingServiceWrapper namingService;\n-\n-    public NacosRegistry(URL url, NacosNamingServiceWrapper namingService) {\n-        super(url);\n-        this.namingService = namingService;\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return \"UP\".equals(namingService.getServerStatus());\n-    }\n-\n-    @Override\n-    public List<URL> lookup(final URL url) {\n-        final List<URL> urls = new LinkedList<>();\n-        execute(namingService -> {\n-            Set<String> serviceNames = getServiceNames(url, null);\n-            for (String serviceName : serviceNames) {\n-                List<Instance> instances = namingService.getAllInstances(serviceName,\n-                        getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP));\n-                urls.addAll(buildURLs(url, instances));\n-            }\n-        });\n-        return urls;\n-    }\n-\n-    @Override\n-    public void doRegister(URL url) {\n-        final String serviceName = getServiceName(url);\n-\n-        final Instance instance = createInstance(url);\n-        /**\n-         *  namingService.registerInstance with {@link org.apache.dubbo.registry.support.AbstractRegistry#registryUrl}\n-         *  default {@link DEFAULT_GROUP}\n-         *\n-         * in https://github.com/apache/dubbo/issues/5978\n-         */\n-        execute(namingService -> namingService.registerInstance(serviceName,\n-                getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP), instance));\n-    }\n-\n-    @Override\n-    public void doUnregister(final URL url) {\n-        execute(namingService -> {\n-            String serviceName = getServiceName(url);\n-            Instance instance = createInstance(url);\n-            namingService.deregisterInstance(serviceName,\n-                    getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP),\n-                    instance.getIp(),\n-                    instance.getPort());\n-        });\n-    }\n-\n-    @Override\n-    public void doSubscribe(final URL url, final NotifyListener listener) {\n-        Set<String> serviceNames = getServiceNames(url, listener);\n-\n-        //Set corresponding serviceNames for easy search later\n-        if (isServiceNamesWithCompatibleMode(url)) {\n-            for (String serviceName : serviceNames) {\n-                NacosInstanceManageUtil.setCorrespondingServiceNames(serviceName, serviceNames);\n-            }\n-        }\n-\n-        doSubscribe(url, listener, serviceNames);\n-    }\n-\n-    private void doSubscribe(final URL url, final NotifyListener listener, final Set<String> serviceNames) {\n-        execute(namingService -> {\n-            if (isServiceNamesWithCompatibleMode(url)) {\n-                List<Instance> allCorrespondingInstanceList = Lists.newArrayList();\n-\n-                /**\n-                 * Get all instances with serviceNames to avoid instance overwrite and but with empty instance mentioned\n-                 * in https://github.com/apache/dubbo/issues/5885 and https://github.com/apache/dubbo/issues/5899\n-                 *\n-                 * namingService.getAllInstances with {@link org.apache.dubbo.registry.support.AbstractRegistry#registryUrl}\n-                 * default {@link DEFAULT_GROUP}\n-                 *\n-                 * in https://github.com/apache/dubbo/issues/5978\n-                 */\n-                for (String serviceName : serviceNames) {\n-                    List<Instance> instances = namingService.getAllInstances(serviceName,\n-                            getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP));\n-                    NacosInstanceManageUtil.initOrRefreshServiceInstanceList(serviceName, instances);\n-                    allCorrespondingInstanceList.addAll(instances);\n-                }\n-                notifySubscriber(url, listener, allCorrespondingInstanceList);\n-                for (String serviceName : serviceNames) {\n-                    subscribeEventListener(serviceName, url, listener);\n-                }\n-            } else {\n-                List<Instance> instances = new LinkedList<>();\n-                for (String serviceName : serviceNames) {\n-                    instances.addAll(namingService.getAllInstances(serviceName\n-                            , getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP)));\n-                    notifySubscriber(url, listener, instances);\n-                    subscribeEventListener(serviceName, url, listener);\n-                }\n-            }\n-\n-        });\n-    }\n-\n-    /**\n-     * Since 2.7.6 the legacy service name will be added to serviceNames\n-     * to fix bug with https://github.com/apache/dubbo/issues/5442\n-     *\n-     * @param url\n-     * @return\n-     */\n-    private boolean isServiceNamesWithCompatibleMode(final URL url) {\n-        return !isAdminProtocol(url) && createServiceName(url).isConcrete();\n-    }\n-\n-    @Override\n-    public void doUnsubscribe(URL url, NotifyListener listener) {\n-        if (isAdminProtocol(url)) {\n-            shutdownServiceNamesLookup();\n-        }\n-    }\n-\n-    private void shutdownServiceNamesLookup() {\n-        if (scheduledExecutorService != null) {\n-            scheduledExecutorService.shutdown();\n-        }\n-    }\n-\n-    /**\n-     * Get the service names from the specified {@link URL url}\n-     *\n-     * @param url      {@link URL}\n-     * @param listener {@link NotifyListener}\n-     * @return non-null\n-     */\n-    private Set<String> getServiceNames(URL url, NotifyListener listener) {\n-        if (isAdminProtocol(url)) {\n-            scheduleServiceNamesLookup(url, listener);\n-            return getServiceNamesForOps(url);\n-        } else {\n-            return getServiceNames0(url);\n-        }\n-    }\n-\n-    private Set<String> getServiceNames0(URL url) {\n-        NacosServiceName serviceName = createServiceName(url);\n-\n-        final Set<String> serviceNames;\n-\n-        if (serviceName.isConcrete()) { // is the concrete service name\n-            serviceNames = new LinkedHashSet<>();\n-            serviceNames.add(serviceName.toString());\n-            // Add the legacy service name since 2.7.6\n-            String legacySubscribedServiceName = getLegacySubscribedServiceName(url);\n-            if (!serviceName.toString().equals(legacySubscribedServiceName)) {\n-                //avoid duplicated service names\n-                serviceNames.add(legacySubscribedServiceName);\n-            }\n-        } else {\n-            serviceNames = filterServiceNames(serviceName);\n-        }\n-\n-        return serviceNames;\n-    }\n-\n-    private Set<String> filterServiceNames(NacosServiceName serviceName) {\n-        Set<String> serviceNames = new LinkedHashSet<>();\n-\n-        execute(namingService -> {\n-\n-            serviceNames.addAll(namingService.getServicesOfServer(1, Integer.MAX_VALUE,\n-                    getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP)).getData()\n-                    .stream()\n-                    .map(NacosServiceName::new)\n-                    .filter(serviceName::isCompatible)\n-                    .map(NacosServiceName::toString)\n-                    .collect(Collectors.toList()));\n-\n-        });\n-\n-        return serviceNames;\n-    }\n-\n-    /**\n-     * Get the legacy subscribed service name for compatible with Dubbo 2.7.3 and below\n-     *\n-     * @param url {@link URL}\n-     * @return non-null\n-     * @since 2.7.6\n-     */\n-    private String getLegacySubscribedServiceName(URL url) {\n-        StringBuilder serviceNameBuilder = new StringBuilder(DEFAULT_CATEGORY);\n-        appendIfPresent(serviceNameBuilder, url, INTERFACE_KEY);\n-        appendIfPresent(serviceNameBuilder, url, VERSION_KEY);\n-        appendIfPresent(serviceNameBuilder, url, GROUP_KEY);\n-        return serviceNameBuilder.toString();\n-    }\n-\n-    private void appendIfPresent(StringBuilder target, URL url, String parameterName) {\n-        String parameterValue = url.getParameter(parameterName);\n-        if (!StringUtils.isBlank(parameterValue)) {\n-            target.append(SERVICE_NAME_SEPARATOR).append(parameterValue);\n-        }\n-    }\n-\n-\n-    private boolean isAdminProtocol(URL url) {\n-        return ADMIN_PROTOCOL.equals(url.getProtocol());\n-    }\n-\n-    private void scheduleServiceNamesLookup(final URL url, final NotifyListener listener) {\n-        if (scheduledExecutorService == null) {\n-            scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();\n-            scheduledExecutorService.scheduleAtFixedRate(() -> {\n-                Set<String> serviceNames = getAllServiceNames();\n-                filterData(serviceNames, serviceName -> {\n-                    boolean accepted = false;\n-                    for (String category : ALL_SUPPORTED_CATEGORIES) {\n-                        String prefix = category + SERVICE_NAME_SEPARATOR;\n-                        if (serviceName != null && serviceName.startsWith(prefix)) {\n-                            accepted = true;\n-                            break;\n-                        }\n-                    }\n-                    return accepted;\n-                });\n-                doSubscribe(url, listener, serviceNames);\n-            }, LOOKUP_INTERVAL, LOOKUP_INTERVAL, TimeUnit.SECONDS);\n-        }\n-    }\n-\n-    /**\n-     * Get the service names for Dubbo OPS\n-     *\n-     * @param url {@link URL}\n-     * @return non-null\n-     */\n-    private Set<String> getServiceNamesForOps(URL url) {\n-        Set<String> serviceNames = getAllServiceNames();\n-        filterServiceNames(serviceNames, url);\n-        return serviceNames;\n-    }\n-\n-    private Set<String> getAllServiceNames() {\n-\n-        final Set<String> serviceNames = new LinkedHashSet<>();\n-\n-        execute(namingService -> {\n-\n-            int pageIndex = 1;\n-            ListView<String> listView = namingService.getServicesOfServer(pageIndex, PAGINATION_SIZE,\n-                    getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP));\n-            // First page data\n-            List<String> firstPageData = listView.getData();\n-            // Append first page into list\n-            serviceNames.addAll(firstPageData);\n-            // the total count\n-            int count = listView.getCount();\n-            // the number of pages\n-            int pageNumbers = count / PAGINATION_SIZE;\n-            int remainder = count % PAGINATION_SIZE;\n-            // remain\n-            if (remainder > 0) {\n-                pageNumbers += 1;\n-            }\n-            // If more than 1 page\n-            while (pageIndex < pageNumbers) {\n-                listView = namingService.getServicesOfServer(++pageIndex, PAGINATION_SIZE,\n-                        getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP));\n-                serviceNames.addAll(listView.getData());\n-            }\n-\n-        });\n-\n-        return serviceNames;\n-    }\n-\n-    private void filterServiceNames(Set<String> serviceNames, URL url) {\n-\n-        final List<String> categories = getCategories(url);\n-\n-        final String targetServiceInterface = url.getServiceInterface();\n-\n-        final String targetVersion = url.getParameter(VERSION_KEY, \"\");\n-\n-        final String targetGroup = url.getParameter(GROUP_KEY, \"\");\n-\n-        filterData(serviceNames, serviceName -> {\n-            // split service name to segments\n-            // (required) segments[0] = category\n-            // (required) segments[1] = serviceInterface\n-            // (optional) segments[2] = version\n-            // (optional) segments[3] = group\n-            String[] segments = serviceName.split(SERVICE_NAME_SEPARATOR, -1);\n-            int length = segments.length;\n-            if (length != 4) { // must present 4 segments\n-                return false;\n-            }\n-\n-            String category = segments[CATEGORY_INDEX];\n-            if (!categories.contains(category)) { // no match category\n-                return false;\n-            }\n-\n-            String serviceInterface = segments[SERVICE_INTERFACE_INDEX];\n-            // no match service interface\n-            if (!WILDCARD.equals(targetServiceInterface) &&\n-                    !StringUtils.isEquals(targetServiceInterface, serviceInterface)) {\n-                return false;\n-            }\n-\n-            // no match service version\n-            String version = segments[SERVICE_VERSION_INDEX];\n-            if (!WILDCARD.equals(targetVersion) && !StringUtils.isEquals(targetVersion, version)) {\n-                return false;\n-            }\n-\n-            String group = segments[SERVICE_GROUP_INDEX];\n-            return group == null || WILDCARD.equals(targetGroup) || StringUtils.isEquals(targetGroup, group);\n-        });\n-    }\n-\n-    private <T> void filterData(Collection<T> collection, NacosDataFilter<T> filter) {\n-        // remove if not accept\n-        collection.removeIf(data -> !filter.accept(data));\n-    }\n-\n-    @Deprecated\n-    private List<String> doGetServiceNames(URL url) {\n-        List<String> categories = getCategories(url);\n-        List<String> serviceNames = new ArrayList<>(categories.size());\n-        for (String category : categories) {\n-            final String serviceName = getServiceName(url, category);\n-            serviceNames.add(serviceName);\n-        }\n-        return serviceNames;\n-    }\n-\n-    private List<URL> toUrlWithEmpty(URL consumerURL, Collection<Instance> instances) {\n-        List<URL> urls = buildURLs(consumerURL, instances);\n-        if (urls.size() == 0) {\n-            URL empty = URLBuilder.from(consumerURL)\n-                    .setProtocol(EMPTY_PROTOCOL)\n-                    .addParameter(CATEGORY_KEY, DEFAULT_CATEGORY)\n-                    .build();\n-            urls.add(empty);\n-        }\n-        return urls;\n-    }\n-\n-    private List<URL> buildURLs(URL consumerURL, Collection<Instance> instances) {\n-        List<URL> urls = new LinkedList<>();\n-        if (instances != null && !instances.isEmpty()) {\n-            for (Instance instance : instances) {\n-                URL url = buildURL(instance);\n-                if (UrlUtils.isMatch(consumerURL, url)) {\n-                    urls.add(url);\n-                }\n-            }\n-        }\n-        return urls;\n-    }\n-\n-    private void subscribeEventListener(String serviceName, final URL url, final NotifyListener listener)\n-            throws NacosException {\n-        EventListener eventListener = event -> {\n-            if (event instanceof NamingEvent) {\n-                NamingEvent e = (NamingEvent) event;\n-                List<Instance> instances = e.getInstances();\n-\n-\n-                if (isServiceNamesWithCompatibleMode(url)) {\n-                    /**\n-                     * Get all instances with corresponding serviceNames to avoid instance overwrite and but with empty instance mentioned\n-                     * in https://github.com/apache/dubbo/issues/5885 and https://github.com/apache/dubbo/issues/5899\n-                     */\n-                    NacosInstanceManageUtil.initOrRefreshServiceInstanceList(serviceName, instances);\n-                    instances = NacosInstanceManageUtil.getAllCorrespondingServiceInstanceList(serviceName);\n-                }\n-\n-                notifySubscriber(url, listener, instances);\n-            }\n-        };\n-        namingService.subscribe(serviceName,\n-                getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP),\n-                eventListener);\n-    }\n-\n-    /**\n-     * Notify the Enabled {@link Instance instances} to subscriber.\n-     *\n-     * @param url       {@link URL}\n-     * @param listener  {@link NotifyListener}\n-     * @param instances all {@link Instance instances}\n-     */\n-    private void notifySubscriber(URL url, NotifyListener listener, Collection<Instance> instances) {\n-        List<Instance> enabledInstances = new LinkedList<>(instances);\n-        if (enabledInstances.size() > 0) {\n-            //  Instances\n-            filterEnabledInstances(enabledInstances);\n-        }\n-        List<URL> urls = toUrlWithEmpty(url, enabledInstances);\n-        NacosRegistry.this.notify(url, listener, urls);\n-    }\n-\n-    /**\n-     * Get the categories from {@link URL}\n-     *\n-     * @param url {@link URL}\n-     * @return non-null array\n-     */\n-    private List<String> getCategories(URL url) {\n-        return ANY_VALUE.equals(url.getServiceInterface()) ?\n-                ALL_SUPPORTED_CATEGORIES : Arrays.asList(DEFAULT_CATEGORY);\n-    }\n-\n-    private URL buildURL(Instance instance) {\n-        Map<String, String> metadata = instance.getMetadata();\n-        String protocol = metadata.get(PROTOCOL_KEY);\n-        String path = metadata.get(PATH_KEY);\n-        return new URL(protocol,\n-                instance.getIp(),\n-                instance.getPort(),\n-                path,\n-                instance.getMetadata());\n-    }\n-\n-    private Instance createInstance(URL url) {\n-        // Append default category if absent\n-        String category = url.getParameter(CATEGORY_KEY, DEFAULT_CATEGORY);\n-        URL newURL = url.addParameter(CATEGORY_KEY, category);\n-        newURL = newURL.addParameter(PROTOCOL_KEY, url.getProtocol());\n-        newURL = newURL.addParameter(PATH_KEY, url.getPath());\n-        newURL = newURL.addParameters(NacosNamingServiceUtils.getNacosPreservedParam(getUrl()));\n-        String ip = url.getHost();\n-        int port = url.getPort();\n-        Instance instance = new Instance();\n-        instance.setIp(ip);\n-        instance.setPort(port);\n-        instance.setMetadata(new HashMap<>(newURL.getParameters()));\n-        return instance;\n-    }\n-\n-    private NacosServiceName createServiceName(URL url) {\n-        return valueOf(url);\n-    }\n-\n-    private String getServiceName(URL url) {\n-        return getServiceName(url, url.getParameter(CATEGORY_KEY, DEFAULT_CATEGORY));\n-    }\n-\n-    private String getServiceName(URL url, String category) {\n-        return category + SERVICE_NAME_SEPARATOR + url.getColonSeparatedKey();\n-    }\n-\n-    private void execute(NamingServiceCallback callback) {\n-        try {\n-            callback.callback(namingService);\n-        } catch (NacosException e) {\n-            if (logger.isErrorEnabled()) {\n-                logger.error(e.getErrMsg(), e);\n-            }\n-        }\n-    }\n-\n-    private void filterEnabledInstances(Collection<Instance> instances) {\n-        filterData(instances, Instance::isEnabled);\n-    }\n-\n-    /**\n-     * A filter for Nacos data\n-     *\n-     * @since 2.6.5\n-     */\n-    private interface NacosDataFilter<T> {\n-\n-        /**\n-         * Tests whether or not the specified data should be accepted.\n-         *\n-         * @param data The data to be tested\n-         * @return <code>true</code> if and only if <code>data</code>\n-         * should be accepted\n-         */\n-        boolean accept(T data);\n-\n-    }\n-\n-    /**\n-     * {@link NamingService} Callback\n-     *\n-     * @since 2.6.5\n-     */\n-    interface NamingServiceCallback {\n-\n-        /**\n-         * Callback\n-         *\n-         * @param namingService {@link NamingService}\n-         * @throws NacosException\n-         */\n-        void callback(NacosNamingServiceWrapper namingService) throws NacosException;\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.nacos;\r\n+\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.URLBuilder;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.common.utils.UrlUtils;\r\n+import org.apache.dubbo.registry.NotifyListener;\r\n+import org.apache.dubbo.registry.Registry;\r\n+import org.apache.dubbo.registry.nacos.util.NacosInstanceManageUtil;\r\n+import org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils;\r\n+import org.apache.dubbo.registry.support.FailbackRegistry;\r\n+\r\n+import com.alibaba.nacos.api.common.Constants;\r\n+import com.alibaba.nacos.api.exception.NacosException;\r\n+import com.alibaba.nacos.api.naming.NamingService;\r\n+import com.alibaba.nacos.api.naming.listener.EventListener;\r\n+import com.alibaba.nacos.api.naming.listener.NamingEvent;\r\n+import com.alibaba.nacos.api.naming.pojo.Instance;\r\n+import com.alibaba.nacos.api.naming.pojo.ListView;\r\n+import com.google.common.collect.Lists;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.Collection;\r\n+import java.util.HashMap;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.concurrent.Executors;\r\n+import java.util.concurrent.ScheduledExecutorService;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.ANY_VALUE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.CATEGORY_KEY;\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.CONFIGURATORS_CATEGORY;\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.CONSUMERS_CATEGORY;\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_CATEGORY;\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.EMPTY_PROTOCOL;\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.PROVIDERS_CATEGORY;\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.ROUTERS_CATEGORY;\r\n+import static org.apache.dubbo.registry.Constants.ADMIN_PROTOCOL;\r\n+import static org.apache.dubbo.registry.nacos.NacosServiceName.valueOf;\r\n+\r\n+/**\r\n+ * Nacos {@link Registry}\r\n+ *\r\n+ * @see #SERVICE_NAME_SEPARATOR\r\n+ * @see #PAGINATION_SIZE\r\n+ * @see #LOOKUP_INTERVAL\r\n+ * @since 2.6.5\r\n+ */\r\n+public class NacosRegistry extends FailbackRegistry {\r\n+\r\n+    /**\r\n+     * All supported categories\r\n+     */\r\n+    private static final List<String> ALL_SUPPORTED_CATEGORIES = Arrays.asList(\r\n+            PROVIDERS_CATEGORY,\r\n+            CONSUMERS_CATEGORY,\r\n+            ROUTERS_CATEGORY,\r\n+            CONFIGURATORS_CATEGORY\r\n+    );\r\n+\r\n+    private static final int CATEGORY_INDEX = 0;\r\n+\r\n+    private static final int SERVICE_INTERFACE_INDEX = 1;\r\n+\r\n+    private static final int SERVICE_VERSION_INDEX = 2;\r\n+\r\n+    private static final int SERVICE_GROUP_INDEX = 3;\r\n+\r\n+    private static final String WILDCARD = \"*\";\r\n+\r\n+    /**\r\n+     * The separator for service name\r\n+     * Change a constant to be configurable, it's designed for Windows file name that is compatible with old\r\n+     * Nacos binary release(< 0.6.1)\r\n+     */\r\n+    private static final String SERVICE_NAME_SEPARATOR = System.getProperty(\"nacos.service.name.separator\", \":\");\r\n+\r\n+    /**\r\n+     * The pagination size of query for Nacos service names(only for Dubbo-OPS)\r\n+     */\r\n+    private static final int PAGINATION_SIZE = Integer.getInteger(\"nacos.service.names.pagination.size\", 100);\r\n+\r\n+    /**\r\n+     * The interval in second of lookup Nacos service names(only for Dubbo-OPS)\r\n+     */\r\n+    private static final long LOOKUP_INTERVAL = Long.getLong(\"nacos.service.names.lookup.interval\", 30);\r\n+\r\n+    /**\r\n+     * {@link ScheduledExecutorService} lookup Nacos service names(only for Dubbo-OPS)\r\n+     */\r\n+    private volatile ScheduledExecutorService scheduledExecutorService;\r\n+\r\n+    private final NacosNamingServiceWrapper namingService;\r\n+\r\n+    public NacosRegistry(URL url, NacosNamingServiceWrapper namingService) {\r\n+        super(url);\r\n+        this.namingService = namingService;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return \"UP\".equals(namingService.getServerStatus());\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<URL> lookup(final URL url) {\r\n+        final List<URL> urls = new LinkedList<>();\r\n+        execute(namingService -> {\r\n+            Set<String> serviceNames = getServiceNames(url, null);\r\n+            for (String serviceName : serviceNames) {\r\n+                List<Instance> instances = namingService.getAllInstances(serviceName,\r\n+                        getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP));\r\n+                urls.addAll(buildURLs(url, instances));\r\n+            }\r\n+        });\r\n+        return urls;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doRegister(URL url) {\r\n+        final String serviceName = getServiceName(url);\r\n+\r\n+        final Instance instance = createInstance(url);\r\n+        /**\r\n+         *  namingService.registerInstance with {@link org.apache.dubbo.registry.support.AbstractRegistry#registryUrl}\r\n+         *  default {@link DEFAULT_GROUP}\r\n+         *\r\n+         * in https://github.com/apache/dubbo/issues/5978\r\n+         */\r\n+        execute(namingService -> namingService.registerInstance(serviceName,\r\n+                getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP), instance));\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doUnregister(final URL url) {\r\n+        execute(namingService -> {\r\n+            String serviceName = getServiceName(url);\r\n+            Instance instance = createInstance(url);\r\n+            namingService.deregisterInstance(serviceName,\r\n+                    getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP),\r\n+                    instance.getIp(),\r\n+                    instance.getPort());\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doSubscribe(final URL url, final NotifyListener listener) {\r\n+        Set<String> serviceNames = getServiceNames(url, listener);\r\n+\r\n+        //Set corresponding serviceNames for easy search later\r\n+        if (isServiceNamesWithCompatibleMode(url)) {\r\n+            for (String serviceName : serviceNames) {\r\n+                NacosInstanceManageUtil.setCorrespondingServiceNames(serviceName, serviceNames);\r\n+            }\r\n+        }\r\n+\r\n+        doSubscribe(url, listener, serviceNames);\r\n+    }\r\n+\r\n+    private void doSubscribe(final URL url, final NotifyListener listener, final Set<String> serviceNames) {\r\n+        execute(namingService -> {\r\n+            if (isServiceNamesWithCompatibleMode(url)) {\r\n+                List<Instance> allCorrespondingInstanceList = Lists.newArrayList();\r\n+\r\n+                /**\r\n+                 * Get all instances with serviceNames to avoid instance overwrite and but with empty instance mentioned\r\n+                 * in https://github.com/apache/dubbo/issues/5885 and https://github.com/apache/dubbo/issues/5899\r\n+                 *\r\n+                 * namingService.getAllInstances with {@link org.apache.dubbo.registry.support.AbstractRegistry#registryUrl}\r\n+                 * default {@link DEFAULT_GROUP}\r\n+                 *\r\n+                 * in https://github.com/apache/dubbo/issues/5978\r\n+                 */\r\n+                for (String serviceName : serviceNames) {\r\n+                    List<Instance> instances = namingService.getAllInstances(serviceName,\r\n+                            getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP));\r\n+                    NacosInstanceManageUtil.initOrRefreshServiceInstanceList(serviceName, instances);\r\n+                    allCorrespondingInstanceList.addAll(instances);\r\n+                }\r\n+                notifySubscriber(url, listener, allCorrespondingInstanceList);\r\n+                for (String serviceName : serviceNames) {\r\n+                    subscribeEventListener(serviceName, url, listener);\r\n+                }\r\n+            } else {\r\n+                List<Instance> instances = new LinkedList<>();\r\n+                for (String serviceName : serviceNames) {\r\n+                    instances.addAll(namingService.getAllInstances(serviceName\r\n+                            , getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP)));\r\n+                    notifySubscriber(url, listener, instances);\r\n+                    subscribeEventListener(serviceName, url, listener);\r\n+                }\r\n+            }\r\n+\r\n+        });\r\n+    }\r\n+\r\n+    /**\r\n+     * Since 2.7.6 the legacy service name will be added to serviceNames\r\n+     * to fix bug with https://github.com/apache/dubbo/issues/5442\r\n+     *\r\n+     * @param url\r\n+     * @return\r\n+     */\r\n+    private boolean isServiceNamesWithCompatibleMode(final URL url) {\r\n+        return !isAdminProtocol(url) && createServiceName(url).isConcrete();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doUnsubscribe(URL url, NotifyListener listener) {\r\n+        if (isAdminProtocol(url)) {\r\n+            shutdownServiceNamesLookup();\r\n+        }\r\n+    }\r\n+\r\n+    private void shutdownServiceNamesLookup() {\r\n+        if (scheduledExecutorService != null) {\r\n+            scheduledExecutorService.shutdown();\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the service names from the specified {@link URL url}\r\n+     *\r\n+     * @param url      {@link URL}\r\n+     * @param listener {@link NotifyListener}\r\n+     * @return non-null\r\n+     */\r\n+    private Set<String> getServiceNames(URL url, NotifyListener listener) {\r\n+        if (isAdminProtocol(url)) {\r\n+            scheduleServiceNamesLookup(url, listener);\r\n+            return getServiceNamesForOps(url);\r\n+        } else {\r\n+            return getServiceNames0(url);\r\n+        }\r\n+    }\r\n+\r\n+    private Set<String> getServiceNames0(URL url) {\r\n+        NacosServiceName serviceName = createServiceName(url);\r\n+\r\n+        final Set<String> serviceNames;\r\n+\r\n+        if (serviceName.isConcrete()) { // is the concrete service name\r\n+            serviceNames = new LinkedHashSet<>();\r\n+            serviceNames.add(serviceName.toString());\r\n+            // Add the legacy service name since 2.7.6\r\n+            String legacySubscribedServiceName = getLegacySubscribedServiceName(url);\r\n+            if (!serviceName.toString().equals(legacySubscribedServiceName)) {\r\n+                //avoid duplicated service names\r\n+                serviceNames.add(legacySubscribedServiceName);\r\n+            }\r\n+        } else {\r\n+            serviceNames = filterServiceNames(serviceName);\r\n+        }\r\n+\r\n+        return serviceNames;\r\n+    }\r\n+\r\n+    private Set<String> filterServiceNames(NacosServiceName serviceName) {\r\n+        Set<String> serviceNames = new LinkedHashSet<>();\r\n+\r\n+        execute(namingService -> {\r\n+\r\n+            serviceNames.addAll(namingService.getServicesOfServer(1, Integer.MAX_VALUE,\r\n+                    getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP)).getData()\r\n+                    .stream()\r\n+                    .map(NacosServiceName::new)\r\n+                    .filter(serviceName::isCompatible)\r\n+                    .map(NacosServiceName::toString)\r\n+                    .collect(Collectors.toList()));\r\n+\r\n+        });\r\n+\r\n+        return serviceNames;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the legacy subscribed service name for compatible with Dubbo 2.7.3 and below\r\n+     *\r\n+     * @param url {@link URL}\r\n+     * @return non-null\r\n+     * @since 2.7.6\r\n+     */\r\n+    private String getLegacySubscribedServiceName(URL url) {\r\n+        StringBuilder serviceNameBuilder = new StringBuilder(DEFAULT_CATEGORY);\r\n+        appendIfPresent(serviceNameBuilder, url, INTERFACE_KEY);\r\n+        appendIfPresent(serviceNameBuilder, url, VERSION_KEY);\r\n+        appendIfPresent(serviceNameBuilder, url, GROUP_KEY);\r\n+        return serviceNameBuilder.toString();\r\n+    }\r\n+\r\n+    private void appendIfPresent(StringBuilder target, URL url, String parameterName) {\r\n+        String parameterValue = url.getParameter(parameterName);\r\n+        if (!StringUtils.isBlank(parameterValue)) {\r\n+            target.append(SERVICE_NAME_SEPARATOR).append(parameterValue);\r\n+        }\r\n+    }\r\n+\r\n+\r\n+    private boolean isAdminProtocol(URL url) {\r\n+        return ADMIN_PROTOCOL.equals(url.getProtocol());\r\n+    }\r\n+\r\n+    private void scheduleServiceNamesLookup(final URL url, final NotifyListener listener) {\r\n+        if (scheduledExecutorService == null) {\r\n+            scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();\r\n+            scheduledExecutorService.scheduleAtFixedRate(() -> {\r\n+                Set<String> serviceNames = getAllServiceNames();\r\n+                filterData(serviceNames, serviceName -> {\r\n+                    boolean accepted = false;\r\n+                    for (String category : ALL_SUPPORTED_CATEGORIES) {\r\n+                        String prefix = category + SERVICE_NAME_SEPARATOR;\r\n+                        if (serviceName != null && serviceName.startsWith(prefix)) {\r\n+                            accepted = true;\r\n+                            break;\r\n+                        }\r\n+                    }\r\n+                    return accepted;\r\n+                });\r\n+                doSubscribe(url, listener, serviceNames);\r\n+            }, LOOKUP_INTERVAL, LOOKUP_INTERVAL, TimeUnit.SECONDS);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the service names for Dubbo OPS\r\n+     *\r\n+     * @param url {@link URL}\r\n+     * @return non-null\r\n+     */\r\n+    private Set<String> getServiceNamesForOps(URL url) {\r\n+        Set<String> serviceNames = getAllServiceNames();\r\n+        filterServiceNames(serviceNames, url);\r\n+        return serviceNames;\r\n+    }\r\n+\r\n+    private Set<String> getAllServiceNames() {\r\n+\r\n+        final Set<String> serviceNames = new LinkedHashSet<>();\r\n+\r\n+        execute(namingService -> {\r\n+\r\n+            int pageIndex = 1;\r\n+            ListView<String> listView = namingService.getServicesOfServer(pageIndex, PAGINATION_SIZE,\r\n+                    getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP));\r\n+            // First page data\r\n+            List<String> firstPageData = listView.getData();\r\n+            // Append first page into list\r\n+            serviceNames.addAll(firstPageData);\r\n+            // the total count\r\n+            int count = listView.getCount();\r\n+            // the number of pages\r\n+            int pageNumbers = count / PAGINATION_SIZE;\r\n+            int remainder = count % PAGINATION_SIZE;\r\n+            // remain\r\n+            if (remainder > 0) {\r\n+                pageNumbers += 1;\r\n+            }\r\n+            // If more than 1 page\r\n+            while (pageIndex < pageNumbers) {\r\n+                listView = namingService.getServicesOfServer(++pageIndex, PAGINATION_SIZE,\r\n+                        getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP));\r\n+                serviceNames.addAll(listView.getData());\r\n+            }\r\n+\r\n+        });\r\n+\r\n+        return serviceNames;\r\n+    }\r\n+\r\n+    private void filterServiceNames(Set<String> serviceNames, URL url) {\r\n+\r\n+        final List<String> categories = getCategories(url);\r\n+\r\n+        final String targetServiceInterface = url.getServiceInterface();\r\n+\r\n+        final String targetVersion = url.getParameter(VERSION_KEY, \"\");\r\n+\r\n+        final String targetGroup = url.getParameter(GROUP_KEY, \"\");\r\n+\r\n+        filterData(serviceNames, serviceName -> {\r\n+            // split service name to segments\r\n+            // (required) segments[0] = category\r\n+            // (required) segments[1] = serviceInterface\r\n+            // (optional) segments[2] = version\r\n+            // (optional) segments[3] = group\r\n+            String[] segments = serviceName.split(SERVICE_NAME_SEPARATOR, -1);\r\n+            int length = segments.length;\r\n+            if (length != 4) { // must present 4 segments\r\n+                return false;\r\n+            }\r\n+\r\n+            String category = segments[CATEGORY_INDEX];\r\n+            if (!categories.contains(category)) { // no match category\r\n+                return false;\r\n+            }\r\n+\r\n+            String serviceInterface = segments[SERVICE_INTERFACE_INDEX];\r\n+            // no match service interface\r\n+            if (!WILDCARD.equals(targetServiceInterface) &&\r\n+                    !StringUtils.isEquals(targetServiceInterface, serviceInterface)) {\r\n+                return false;\r\n+            }\r\n+\r\n+            // no match service version\r\n+            String version = segments[SERVICE_VERSION_INDEX];\r\n+            if (!WILDCARD.equals(targetVersion) && !StringUtils.isEquals(targetVersion, version)) {\r\n+                return false;\r\n+            }\r\n+\r\n+            String group = segments[SERVICE_GROUP_INDEX];\r\n+            return group == null || WILDCARD.equals(targetGroup) || StringUtils.isEquals(targetGroup, group);\r\n+        });\r\n+    }\r\n+\r\n+    private <T> void filterData(Collection<T> collection, NacosDataFilter<T> filter) {\r\n+        // remove if not accept\r\n+        collection.removeIf(data -> !filter.accept(data));\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    private List<String> doGetServiceNames(URL url) {\r\n+        List<String> categories = getCategories(url);\r\n+        List<String> serviceNames = new ArrayList<>(categories.size());\r\n+        for (String category : categories) {\r\n+            final String serviceName = getServiceName(url, category);\r\n+            serviceNames.add(serviceName);\r\n+        }\r\n+        return serviceNames;\r\n+    }\r\n+\r\n+    private List<URL> toUrlWithEmpty(URL consumerURL, Collection<Instance> instances) {\r\n+        List<URL> urls = buildURLs(consumerURL, instances);\r\n+        if (urls.size() == 0) {\r\n+            URL empty = URLBuilder.from(consumerURL)\r\n+                    .setProtocol(EMPTY_PROTOCOL)\r\n+                    .addParameter(CATEGORY_KEY, DEFAULT_CATEGORY)\r\n+                    .build();\r\n+            urls.add(empty);\r\n+        }\r\n+        return urls;\r\n+    }\r\n+\r\n+    private List<URL> buildURLs(URL consumerURL, Collection<Instance> instances) {\r\n+        List<URL> urls = new LinkedList<>();\r\n+        if (instances != null && !instances.isEmpty()) {\r\n+            for (Instance instance : instances) {\r\n+                URL url = buildURL(instance);\r\n+                if (UrlUtils.isMatch(consumerURL, url)) {\r\n+                    urls.add(url);\r\n+                }\r\n+            }\r\n+        }\r\n+        return urls;\r\n+    }\r\n+\r\n+    private void subscribeEventListener(String serviceName, final URL url, final NotifyListener listener)\r\n+            throws NacosException {\r\n+        EventListener eventListener = event -> {\r\n+            if (event instanceof NamingEvent) {\r\n+                NamingEvent e = (NamingEvent) event;\r\n+                List<Instance> instances = e.getInstances();\r\n+\r\n+\r\n+                if (isServiceNamesWithCompatibleMode(url)) {\r\n+                    /**\r\n+                     * Get all instances with corresponding serviceNames to avoid instance overwrite and but with empty instance mentioned\r\n+                     * in https://github.com/apache/dubbo/issues/5885 and https://github.com/apache/dubbo/issues/5899\r\n+                     */\r\n+                    NacosInstanceManageUtil.initOrRefreshServiceInstanceList(serviceName, instances);\r\n+                    instances = NacosInstanceManageUtil.getAllCorrespondingServiceInstanceList(serviceName);\r\n+                }\r\n+\r\n+                notifySubscriber(url, listener, instances);\r\n+            }\r\n+        };\r\n+        namingService.subscribe(serviceName,\r\n+                getUrl().getParameter(GROUP_KEY, Constants.DEFAULT_GROUP),\r\n+                eventListener);\r\n+    }\r\n+\r\n+    /**\r\n+     * Notify the Enabled {@link Instance instances} to subscriber.\r\n+     *\r\n+     * @param url       {@link URL}\r\n+     * @param listener  {@link NotifyListener}\r\n+     * @param instances all {@link Instance instances}\r\n+     */\r\n+    private void notifySubscriber(URL url, NotifyListener listener, Collection<Instance> instances) {\r\n+        List<Instance> enabledInstances = new LinkedList<>(instances);\r\n+        if (enabledInstances.size() > 0) {\r\n+            //  Instances\r\n+            filterEnabledInstances(enabledInstances);\r\n+        }\r\n+        List<URL> urls = toUrlWithEmpty(url, enabledInstances);\r\n+        NacosRegistry.this.notify(url, listener, urls);\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the categories from {@link URL}\r\n+     *\r\n+     * @param url {@link URL}\r\n+     * @return non-null array\r\n+     */\r\n+    private List<String> getCategories(URL url) {\r\n+        return ANY_VALUE.equals(url.getServiceInterface()) ?\r\n+                ALL_SUPPORTED_CATEGORIES : Arrays.asList(DEFAULT_CATEGORY);\r\n+    }\r\n+\r\n+    private URL buildURL(Instance instance) {\r\n+        Map<String, String> metadata = instance.getMetadata();\r\n+        String protocol = metadata.get(PROTOCOL_KEY);\r\n+        String path = metadata.get(PATH_KEY);\r\n+        return new URL(protocol,\r\n+                instance.getIp(),\r\n+                instance.getPort(),\r\n+                path,\r\n+                instance.getMetadata());\r\n+    }\r\n+\r\n+    private Instance createInstance(URL url) {\r\n+        // Append default category if absent\r\n+        String category = url.getParameter(CATEGORY_KEY, DEFAULT_CATEGORY);\r\n+        URL newURL = url.addParameter(CATEGORY_KEY, category);\r\n+        newURL = newURL.addParameter(PROTOCOL_KEY, url.getProtocol());\r\n+        newURL = newURL.addParameter(PATH_KEY, url.getPath());\r\n+        newURL = newURL.addParameters(NacosNamingServiceUtils.getNacosPreservedParam(getUrl()));\r\n+        String ip = url.getHost();\r\n+        int port = url.getPort();\r\n+        Instance instance = new Instance();\r\n+        instance.setIp(ip);\r\n+        instance.setPort(port);\r\n+        instance.setMetadata(new HashMap<>(newURL.getParameters()));\r\n+        return instance;\r\n+    }\r\n+\r\n+    private NacosServiceName createServiceName(URL url) {\r\n+        return valueOf(url);\r\n+    }\r\n+\r\n+    private String getServiceName(URL url) {\r\n+        return getServiceName(url, url.getParameter(CATEGORY_KEY, DEFAULT_CATEGORY));\r\n+    }\r\n+\r\n+    private String getServiceName(URL url, String category) {\r\n+        return category + SERVICE_NAME_SEPARATOR + url.getColonSeparatedKey();\r\n+    }\r\n+\r\n+    private void execute(NamingServiceCallback callback) {\r\n+        try {\r\n+            callback.callback(namingService);\r\n+        } catch (NacosException e) {\r\n+            if (logger.isErrorEnabled()) {\r\n+                logger.error(e.getErrMsg(), e);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private void filterEnabledInstances(Collection<Instance> instances) {\r\n+        filterData(instances, Instance::isEnabled);\r\n+    }\r\n+\r\n+    /**\r\n+     * A filter for Nacos data\r\n+     *\r\n+     * @since 2.6.5\r\n+     */\r\n+    private interface NacosDataFilter<T> {\r\n+\r\n+        /**\r\n+         * Tests whether or not the specified data should be accepted.\r\n+         *\r\n+         * @param data The data to be tested\r\n+         * @return <code>true</code> if and only if <code>data</code>\r\n+         * should be accepted\r\n+         */\r\n+        boolean accept(T data);\r\n+\r\n+    }\r\n+\r\n+    /**\r\n+     * {@link NamingService} Callback\r\n+     *\r\n+     * @since 2.6.5\r\n+     */\r\n+    interface NamingServiceCallback {\r\n+\r\n+        /**\r\n+         * Callback\r\n+         *\r\n+         * @param namingService {@link NamingService}\r\n+         * @throws NacosException\r\n+         */\r\n+        void callback(NacosNamingServiceWrapper namingService) throws NacosException;\r\n+\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/nacos/NacosRegistryFactory.java", "source2": "org/apache/dubbo/registry/nacos/NacosRegistryFactory.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,49 +1,49 @@\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.nacos;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.registry.Registry;\n-import org.apache.dubbo.registry.RegistryFactory;\n-import org.apache.dubbo.registry.support.AbstractRegistryFactory;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY;\n-import static org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils.createNamingService;\n-\n-/**\n- * Nacos {@link RegistryFactory}\n- *\n- * @since 2.6.5\n- */\n-public class NacosRegistryFactory extends AbstractRegistryFactory {\n-\n-    @Override\n-    protected String createRegistryCacheKey(URL url) {\n-        String namespace = url.getParameter(CONFIG_NAMESPACE_KEY);\n-        url = URL.valueOf(url.toServiceStringWithoutResolving());\n-        if (StringUtils.isNotEmpty(namespace)) {\n-            url = url.addParameter(CONFIG_NAMESPACE_KEY, namespace);\n-        }\n-        return url.toFullString();\n-    }\n-\n-    @Override\n-    protected Registry createRegistry(URL url) {\n-        return new NacosRegistry(url, createNamingService(url));\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.nacos;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.registry.Registry;\r\n+import org.apache.dubbo.registry.RegistryFactory;\r\n+import org.apache.dubbo.registry.support.AbstractRegistryFactory;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY;\r\n+import static org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils.createNamingService;\r\n+\r\n+/**\r\n+ * Nacos {@link RegistryFactory}\r\n+ *\r\n+ * @since 2.6.5\r\n+ */\r\n+public class NacosRegistryFactory extends AbstractRegistryFactory {\r\n+\r\n+    @Override\r\n+    protected String createRegistryCacheKey(URL url) {\r\n+        String namespace = url.getParameter(CONFIG_NAMESPACE_KEY);\r\n+        url = URL.valueOf(url.toServiceStringWithoutResolving());\r\n+        if (StringUtils.isNotEmpty(namespace)) {\r\n+            url = url.addParameter(CONFIG_NAMESPACE_KEY, namespace);\r\n+        }\r\n+        return url.toFullString();\r\n+    }\r\n+\r\n+    @Override\r\n+    protected Registry createRegistry(URL url) {\r\n+        return new NacosRegistry(url, createNamingService(url));\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/nacos/NacosServiceDiscovery.java", "source2": "org/apache/dubbo/registry/nacos/NacosServiceDiscovery.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,154 +1,154 @@\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.nacos;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.function.ThrowableFunction;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.registry.client.AbstractServiceDiscovery;\n-import org.apache.dubbo.registry.client.ServiceDiscovery;\n-import org.apache.dubbo.registry.client.ServiceInstance;\n-import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;\n-import org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils;\n-\n-import com.alibaba.nacos.api.exception.NacosException;\n-import com.alibaba.nacos.api.naming.listener.NamingEvent;\n-import com.alibaba.nacos.api.naming.pojo.Instance;\n-import com.alibaba.nacos.api.naming.pojo.ListView;\n-\n-import java.util.LinkedHashSet;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.stream.Collectors;\n-\n-import static org.apache.dubbo.common.function.ThrowableConsumer.execute;\n-import static org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils.createNamingService;\n-import static org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils.getGroup;\n-import static org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils.toInstance;\n-\n-/**\n- * Nacos {@link ServiceDiscovery} implementation\n- *\n- * @see ServiceDiscovery\n- * @since 2.7.5\n- */\n-public class NacosServiceDiscovery extends AbstractServiceDiscovery {\n-\n-    private final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    private String group;\n-\n-    private NacosNamingServiceWrapper namingService;\n-\n-    private URL registryURL;\n-\n-    @Override\n-    public void initialize(URL registryURL) throws Exception {\n-        this.namingService = createNamingService(registryURL);\n-        this.group = getGroup(registryURL);\n-        this.registryURL = registryURL;\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        this.namingService = null;\n-    }\n-\n-    @Override\n-    public void doRegister(ServiceInstance serviceInstance) {\n-        execute(namingService, service -> {\n-            Instance instance = toInstance(serviceInstance);\n-            appendPreservedParam(instance);\n-            service.registerInstance(instance.getServiceName(), group, instance);\n-        });\n-    }\n-\n-    @Override\n-    public void doUpdate(ServiceInstance serviceInstance) {\n-        if (this.serviceInstance == null) {\n-            register(serviceInstance);\n-        } else {\n-            unregister(serviceInstance);\n-            register(serviceInstance);\n-        }\n-    }\n-\n-    @Override\n-    public void unregister(ServiceInstance serviceInstance) throws RuntimeException {\n-        execute(namingService, service -> {\n-            Instance instance = toInstance(serviceInstance);\n-            service.deregisterInstance(instance.getServiceName(), group, instance);\n-        });\n-    }\n-\n-    @Override\n-    public Set<String> getServices() {\n-        return ThrowableFunction.execute(namingService, service -> {\n-            ListView<String> view = service.getServicesOfServer(0, Integer.MAX_VALUE, group);\n-            return new LinkedHashSet<>(view.getData());\n-        });\n-    }\n-\n-    @Override\n-    public List<ServiceInstance> getInstances(String serviceName) throws NullPointerException {\n-        return ThrowableFunction.execute(namingService, service ->\n-                service.selectInstances(serviceName, true)\n-                        .stream().map(NacosNamingServiceUtils::toServiceInstance)\n-                        .collect(Collectors.toList())\n-        );\n-    }\n-\n-    @Override\n-    public void addServiceInstancesChangedListener(ServiceInstancesChangedListener listener)\n-            throws NullPointerException, IllegalArgumentException {\n-        execute(namingService, service -> {\n-            listener.getServiceNames().forEach(serviceName -> {\n-                try {\n-                    service.subscribe(serviceName, e -> { // Register Nacos EventListener\n-                        if (e instanceof NamingEvent) {\n-                            NamingEvent event = (NamingEvent) e;\n-                            handleEvent(event, listener);\n-                        }\n-                    });\n-                } catch (NacosException e) {\n-                    e.printStackTrace();\n-                }\n-            });\n-        });\n-    }\n-\n-    @Override\n-    public URL getUrl() {\n-        return registryURL;\n-    }\n-\n-    private void handleEvent(NamingEvent event, ServiceInstancesChangedListener listener) {\n-        String serviceName = event.getServiceName();\n-        List<ServiceInstance> serviceInstances = event.getInstances()\n-                .stream()\n-                .map(NacosNamingServiceUtils::toServiceInstance)\n-                .collect(Collectors.toList());\n-        dispatchServiceInstancesChangedEvent(serviceName, serviceInstances);\n-    }\n-\n-    private void appendPreservedParam(Instance instance) {\n-        Map<String, String> preservedParam = NacosNamingServiceUtils.getNacosPreservedParam(getUrl());\n-        instance.getMetadata().putAll(preservedParam);\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.nacos;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.function.ThrowableFunction;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\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.ServiceInstance;\r\n+import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;\r\n+import org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils;\r\n+\r\n+import com.alibaba.nacos.api.exception.NacosException;\r\n+import com.alibaba.nacos.api.naming.listener.NamingEvent;\r\n+import com.alibaba.nacos.api.naming.pojo.Instance;\r\n+import com.alibaba.nacos.api.naming.pojo.ListView;\r\n+\r\n+import java.util.LinkedHashSet;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static org.apache.dubbo.common.function.ThrowableConsumer.execute;\r\n+import static org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils.createNamingService;\r\n+import static org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils.getGroup;\r\n+import static org.apache.dubbo.registry.nacos.util.NacosNamingServiceUtils.toInstance;\r\n+\r\n+/**\r\n+ * Nacos {@link ServiceDiscovery} implementation\r\n+ *\r\n+ * @see ServiceDiscovery\r\n+ * @since 2.7.5\r\n+ */\r\n+public class NacosServiceDiscovery extends AbstractServiceDiscovery {\r\n+\r\n+    private final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    private String group;\r\n+\r\n+    private NacosNamingServiceWrapper namingService;\r\n+\r\n+    private URL registryURL;\r\n+\r\n+    @Override\r\n+    public void initialize(URL registryURL) throws Exception {\r\n+        this.namingService = createNamingService(registryURL);\r\n+        this.group = getGroup(registryURL);\r\n+        this.registryURL = registryURL;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        this.namingService = null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doRegister(ServiceInstance serviceInstance) {\r\n+        execute(namingService, service -> {\r\n+            Instance instance = toInstance(serviceInstance);\r\n+            appendPreservedParam(instance);\r\n+            service.registerInstance(instance.getServiceName(), group, instance);\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doUpdate(ServiceInstance serviceInstance) {\r\n+        if (this.serviceInstance == null) {\r\n+            register(serviceInstance);\r\n+        } else {\r\n+            unregister(serviceInstance);\r\n+            register(serviceInstance);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void unregister(ServiceInstance serviceInstance) throws RuntimeException {\r\n+        execute(namingService, service -> {\r\n+            Instance instance = toInstance(serviceInstance);\r\n+            service.deregisterInstance(instance.getServiceName(), group, instance);\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public Set<String> getServices() {\r\n+        return ThrowableFunction.execute(namingService, service -> {\r\n+            ListView<String> view = service.getServicesOfServer(0, Integer.MAX_VALUE, group);\r\n+            return new LinkedHashSet<>(view.getData());\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<ServiceInstance> getInstances(String serviceName) throws NullPointerException {\r\n+        return ThrowableFunction.execute(namingService, service ->\r\n+                service.selectInstances(serviceName, true)\r\n+                        .stream().map(NacosNamingServiceUtils::toServiceInstance)\r\n+                        .collect(Collectors.toList())\r\n+        );\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addServiceInstancesChangedListener(ServiceInstancesChangedListener listener)\r\n+            throws NullPointerException, IllegalArgumentException {\r\n+        execute(namingService, service -> {\r\n+            listener.getServiceNames().forEach(serviceName -> {\r\n+                try {\r\n+                    service.subscribe(serviceName, e -> { // Register Nacos EventListener\r\n+                        if (e instanceof NamingEvent) {\r\n+                            NamingEvent event = (NamingEvent) e;\r\n+                            handleEvent(event, listener);\r\n+                        }\r\n+                    });\r\n+                } catch (NacosException e) {\r\n+                    e.printStackTrace();\r\n+                }\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+    private void handleEvent(NamingEvent event, ServiceInstancesChangedListener listener) {\r\n+        String serviceName = event.getServiceName();\r\n+        List<ServiceInstance> serviceInstances = event.getInstances()\r\n+                .stream()\r\n+                .map(NacosNamingServiceUtils::toServiceInstance)\r\n+                .collect(Collectors.toList());\r\n+        dispatchServiceInstancesChangedEvent(serviceName, serviceInstances);\r\n+    }\r\n+\r\n+    private void appendPreservedParam(Instance instance) {\r\n+        Map<String, String> preservedParam = NacosNamingServiceUtils.getNacosPreservedParam(getUrl());\r\n+        instance.getMetadata().putAll(preservedParam);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/nacos/NacosServiceDiscoveryFactory.java", "source2": "org/apache/dubbo/registry/nacos/NacosServiceDiscoveryFactory.java", "comments": ["Line-ending 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.nacos;\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-/**\n- *\n- */\n-public class NacosServiceDiscoveryFactory extends AbstractServiceDiscoveryFactory {\n-\n-    @Override\n-    protected ServiceDiscovery createDiscovery(URL registryURL) {\n-        return new NacosServiceDiscovery();\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.nacos;\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+/**\r\n+ *\r\n+ */\r\n+public class NacosServiceDiscoveryFactory extends AbstractServiceDiscoveryFactory {\r\n+\r\n+    @Override\r\n+    protected ServiceDiscovery createDiscovery(URL registryURL) {\r\n+        return new NacosServiceDiscovery();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/nacos/NacosServiceName.java", "source2": "org/apache/dubbo/registry/nacos/NacosServiceName.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,234 +1,234 @@\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.nacos;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.util.Arrays;\n-import java.util.Objects;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.common.constants.RegistryConstants.CATEGORY_KEY;\n-import static org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_CATEGORY;\n-import static org.apache.dubbo.common.utils.StringUtils.isBlank;\n-\n-/**\n- * The service name of Nacos\n- *\n- * @since 2.7.3\n- */\n-public class NacosServiceName {\n-\n-    public static final String NAME_SEPARATOR = \":\";\n-\n-    public static final String VALUE_SEPARATOR = \",\";\n-\n-    public static final String WILDCARD = \"*\";\n-\n-    public static final String DEFAULT_PARAM_VALUE = \"\";\n-\n-    private static final int CATEGORY_INDEX = 0;\n-\n-    private static final int SERVICE_INTERFACE_INDEX = 1;\n-\n-    private static final int SERVICE_VERSION_INDEX = 2;\n-\n-    private static final int SERVICE_GROUP_INDEX = 3;\n-\n-    private String category;\n-\n-    private String serviceInterface;\n-\n-    private String version;\n-\n-    private String group;\n-\n-    private String value;\n-\n-    public NacosServiceName() {\n-    }\n-\n-    public NacosServiceName(URL url) {\n-        serviceInterface = url.getParameter(INTERFACE_KEY);\n-        category = isConcrete(serviceInterface) ? DEFAULT_CATEGORY : url.getParameter(CATEGORY_KEY);\n-        version = url.getParameter(VERSION_KEY, DEFAULT_PARAM_VALUE);\n-        group = url.getParameter(GROUP_KEY, DEFAULT_PARAM_VALUE);\n-        value = toValue();\n-    }\n-\n-    public NacosServiceName(String value) {\n-        this.value = value;\n-        String[] segments = value.split(NAME_SEPARATOR, -1);\n-        this.category = segments[CATEGORY_INDEX];\n-        this.serviceInterface = segments[SERVICE_INTERFACE_INDEX];\n-        this.version = segments[SERVICE_VERSION_INDEX];\n-        this.group = segments[SERVICE_GROUP_INDEX];\n-    }\n-\n-    /**\n-     * Build an instance of {@link NacosServiceName}\n-     *\n-     * @param url\n-     * @return\n-     */\n-    public static NacosServiceName valueOf(URL url) {\n-        return new NacosServiceName(url);\n-    }\n-\n-    /**\n-     * Is the concrete service name or not\n-     *\n-     * @return if concrete , return <code>true</code>, or <code>false</code>\n-     */\n-    public boolean isConcrete() {\n-        return isConcrete(serviceInterface) && isConcrete(version) && isConcrete(group);\n-    }\n-\n-    public boolean isCompatible(NacosServiceName concreteServiceName) {\n-\n-        if (!concreteServiceName.isConcrete()) { // The argument must be the concrete NacosServiceName\n-            return false;\n-        }\n-\n-        // Not match comparison\n-        if (!StringUtils.isEquals(this.category, concreteServiceName.category)\n-                && !matchRange(this.category, concreteServiceName.category)) {\n-            return false;\n-        }\n-\n-        if (!StringUtils.isEquals(this.serviceInterface, concreteServiceName.serviceInterface)) {\n-            return false;\n-        }\n-\n-        // wildcard condition\n-        if (isWildcard(this.version)) {\n-            return true;\n-        }\n-\n-        if (isWildcard(this.group)) {\n-            return true;\n-        }\n-\n-        // range condition\n-        if (!StringUtils.isEquals(this.version, concreteServiceName.version)\n-                && !matchRange(this.version, concreteServiceName.version)) {\n-            return false;\n-        }\n-\n-        if (!StringUtils.isEquals(this.group, concreteServiceName.group) &&\n-                !matchRange(this.group, concreteServiceName.group)) {\n-            return false;\n-        }\n-\n-        return true;\n-    }\n-\n-    private boolean matchRange(String range, String value) {\n-        if (isBlank(range)) {\n-            return true;\n-        }\n-        if (!isRange(range)) {\n-            return false;\n-        }\n-        String[] values = range.split(VALUE_SEPARATOR);\n-        return Arrays.asList(values).contains(value);\n-    }\n-\n-    private boolean isConcrete(String value) {\n-        return !isWildcard(value) && !isRange(value);\n-    }\n-\n-    private boolean isWildcard(String value) {\n-        return WILDCARD.equals(value);\n-    }\n-\n-    private boolean isRange(String value) {\n-        return value != null && value.indexOf(VALUE_SEPARATOR) > -1 && value.split(VALUE_SEPARATOR).length > 1;\n-    }\n-\n-    public String getCategory() {\n-        return category;\n-    }\n-\n-    public void setCategory(String category) {\n-        this.category = category;\n-    }\n-\n-    public String getServiceInterface() {\n-        return serviceInterface;\n-    }\n-\n-    public void setServiceInterface(String serviceInterface) {\n-        this.serviceInterface = serviceInterface;\n-    }\n-\n-    public String getVersion() {\n-        return version;\n-    }\n-\n-    public void setVersion(String version) {\n-        this.version = version;\n-    }\n-\n-    public String getGroup() {\n-        return group;\n-    }\n-\n-    public void setGroup(String group) {\n-        this.group = group;\n-    }\n-\n-    public String getValue() {\n-        if (value == null) {\n-            value = toValue();\n-        }\n-        return value;\n-    }\n-\n-    private String toValue() {\n-        return new StringBuilder(category)\n-                .append(NAME_SEPARATOR).append(serviceInterface)\n-                .append(NAME_SEPARATOR).append(version)\n-                .append(NAME_SEPARATOR).append(group)\n-                .toString();\n-    }\n-\n-    @Override\n-    public boolean equals(Object o) {\n-        if (this == o) {\n-            return true;\n-        }\n-        if (!(o instanceof NacosServiceName)) {\n-            return false;\n-        }\n-        NacosServiceName that = (NacosServiceName) o;\n-        return Objects.equals(getValue(), that.getValue());\n-    }\n-\n-    @Override\n-    public int hashCode() {\n-        return Objects.hash(getValue());\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return getValue();\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.nacos;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.util.Arrays;\r\n+import java.util.Objects;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.CATEGORY_KEY;\r\n+import static org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_CATEGORY;\r\n+import static org.apache.dubbo.common.utils.StringUtils.isBlank;\r\n+\r\n+/**\r\n+ * The service name of Nacos\r\n+ *\r\n+ * @since 2.7.3\r\n+ */\r\n+public class NacosServiceName {\r\n+\r\n+    public static final String NAME_SEPARATOR = \":\";\r\n+\r\n+    public static final String VALUE_SEPARATOR = \",\";\r\n+\r\n+    public static final String WILDCARD = \"*\";\r\n+\r\n+    public static final String DEFAULT_PARAM_VALUE = \"\";\r\n+\r\n+    private static final int CATEGORY_INDEX = 0;\r\n+\r\n+    private static final int SERVICE_INTERFACE_INDEX = 1;\r\n+\r\n+    private static final int SERVICE_VERSION_INDEX = 2;\r\n+\r\n+    private static final int SERVICE_GROUP_INDEX = 3;\r\n+\r\n+    private String category;\r\n+\r\n+    private String serviceInterface;\r\n+\r\n+    private String version;\r\n+\r\n+    private String group;\r\n+\r\n+    private String value;\r\n+\r\n+    public NacosServiceName() {\r\n+    }\r\n+\r\n+    public NacosServiceName(URL url) {\r\n+        serviceInterface = url.getParameter(INTERFACE_KEY);\r\n+        category = isConcrete(serviceInterface) ? DEFAULT_CATEGORY : url.getParameter(CATEGORY_KEY);\r\n+        version = url.getParameter(VERSION_KEY, DEFAULT_PARAM_VALUE);\r\n+        group = url.getParameter(GROUP_KEY, DEFAULT_PARAM_VALUE);\r\n+        value = toValue();\r\n+    }\r\n+\r\n+    public NacosServiceName(String value) {\r\n+        this.value = value;\r\n+        String[] segments = value.split(NAME_SEPARATOR, -1);\r\n+        this.category = segments[CATEGORY_INDEX];\r\n+        this.serviceInterface = segments[SERVICE_INTERFACE_INDEX];\r\n+        this.version = segments[SERVICE_VERSION_INDEX];\r\n+        this.group = segments[SERVICE_GROUP_INDEX];\r\n+    }\r\n+\r\n+    /**\r\n+     * Build an instance of {@link NacosServiceName}\r\n+     *\r\n+     * @param url\r\n+     * @return\r\n+     */\r\n+    public static NacosServiceName valueOf(URL url) {\r\n+        return new NacosServiceName(url);\r\n+    }\r\n+\r\n+    /**\r\n+     * Is the concrete service name or not\r\n+     *\r\n+     * @return if concrete , return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    public boolean isConcrete() {\r\n+        return isConcrete(serviceInterface) && isConcrete(version) && isConcrete(group);\r\n+    }\r\n+\r\n+    public boolean isCompatible(NacosServiceName concreteServiceName) {\r\n+\r\n+        if (!concreteServiceName.isConcrete()) { // The argument must be the concrete NacosServiceName\r\n+            return false;\r\n+        }\r\n+\r\n+        // Not match comparison\r\n+        if (!StringUtils.isEquals(this.category, concreteServiceName.category)\r\n+                && !matchRange(this.category, concreteServiceName.category)) {\r\n+            return false;\r\n+        }\r\n+\r\n+        if (!StringUtils.isEquals(this.serviceInterface, concreteServiceName.serviceInterface)) {\r\n+            return false;\r\n+        }\r\n+\r\n+        // wildcard condition\r\n+        if (isWildcard(this.version)) {\r\n+            return true;\r\n+        }\r\n+\r\n+        if (isWildcard(this.group)) {\r\n+            return true;\r\n+        }\r\n+\r\n+        // range condition\r\n+        if (!StringUtils.isEquals(this.version, concreteServiceName.version)\r\n+                && !matchRange(this.version, concreteServiceName.version)) {\r\n+            return false;\r\n+        }\r\n+\r\n+        if (!StringUtils.isEquals(this.group, concreteServiceName.group) &&\r\n+                !matchRange(this.group, concreteServiceName.group)) {\r\n+            return false;\r\n+        }\r\n+\r\n+        return true;\r\n+    }\r\n+\r\n+    private boolean matchRange(String range, String value) {\r\n+        if (isBlank(range)) {\r\n+            return true;\r\n+        }\r\n+        if (!isRange(range)) {\r\n+            return false;\r\n+        }\r\n+        String[] values = range.split(VALUE_SEPARATOR);\r\n+        return Arrays.asList(values).contains(value);\r\n+    }\r\n+\r\n+    private boolean isConcrete(String value) {\r\n+        return !isWildcard(value) && !isRange(value);\r\n+    }\r\n+\r\n+    private boolean isWildcard(String value) {\r\n+        return WILDCARD.equals(value);\r\n+    }\r\n+\r\n+    private boolean isRange(String value) {\r\n+        return value != null && value.indexOf(VALUE_SEPARATOR) > -1 && value.split(VALUE_SEPARATOR).length > 1;\r\n+    }\r\n+\r\n+    public String getCategory() {\r\n+        return category;\r\n+    }\r\n+\r\n+    public void setCategory(String category) {\r\n+        this.category = category;\r\n+    }\r\n+\r\n+    public String getServiceInterface() {\r\n+        return serviceInterface;\r\n+    }\r\n+\r\n+    public void setServiceInterface(String serviceInterface) {\r\n+        this.serviceInterface = serviceInterface;\r\n+    }\r\n+\r\n+    public String getVersion() {\r\n+        return version;\r\n+    }\r\n+\r\n+    public void setVersion(String version) {\r\n+        this.version = version;\r\n+    }\r\n+\r\n+    public String getGroup() {\r\n+        return group;\r\n+    }\r\n+\r\n+    public void setGroup(String group) {\r\n+        this.group = group;\r\n+    }\r\n+\r\n+    public String getValue() {\r\n+        if (value == null) {\r\n+            value = toValue();\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+    private String toValue() {\r\n+        return new StringBuilder(category)\r\n+                .append(NAME_SEPARATOR).append(serviceInterface)\r\n+                .append(NAME_SEPARATOR).append(version)\r\n+                .append(NAME_SEPARATOR).append(group)\r\n+                .toString();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean equals(Object o) {\r\n+        if (this == o) {\r\n+            return true;\r\n+        }\r\n+        if (!(o instanceof NacosServiceName)) {\r\n+            return false;\r\n+        }\r\n+        NacosServiceName that = (NacosServiceName) o;\r\n+        return Objects.equals(getValue(), that.getValue());\r\n+    }\r\n+\r\n+    @Override\r\n+    public int hashCode() {\r\n+        return Objects.hash(getValue());\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return getValue();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java", "source2": "org/apache/dubbo/registry/nacos/util/NacosInstanceManageUtil.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,67 +1,67 @@\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.nacos.util;\n-\n-import com.alibaba.nacos.api.naming.pojo.Instance;\n-import com.google.common.collect.Lists;\n-import com.google.common.collect.Maps;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-\n-/**\n- * Instance manage util for multiple serviceNames\n- * To resolve bug with https://github.com/apache/dubbo/issues/5885 and https://github.com/apache/dubbo/issues/5899\n- *\n- * @since 2.7.6\n- */\n-public class NacosInstanceManageUtil {\n-\n-    /**\n-     * serviceName -> refreshed instance list\n-     */\n-    private static final Map<String, List<Instance>> SERVICE_INSTANCE_LIST_MAP = Maps.newConcurrentMap();\n-\n-    /**\n-     * serviceName -> corresponding serviceName list\n-     */\n-    private static final Map<String, Set<String>> CORRESPONDING_SERVICE_NAMES_MAP = Maps.newConcurrentMap();\n-\n-    public static void setCorrespondingServiceNames(String serviceName, Set<String> serviceNames) {\n-        CORRESPONDING_SERVICE_NAMES_MAP.put(serviceName, serviceNames);\n-    }\n-\n-    public static void initOrRefreshServiceInstanceList(String serviceName, List<Instance> instanceList) {\n-        SERVICE_INSTANCE_LIST_MAP.put(serviceName, instanceList);\n-    }\n-\n-    public static List<Instance> getAllCorrespondingServiceInstanceList(String serviceName) {\n-        if (!CORRESPONDING_SERVICE_NAMES_MAP.containsKey(serviceName)) {\n-            return Lists.newArrayList();\n-        }\n-        List<Instance> allInstances = Lists.newArrayList();\n-        for (String correspondingServiceName : CORRESPONDING_SERVICE_NAMES_MAP.get(serviceName)) {\n-            if (SERVICE_INSTANCE_LIST_MAP.containsKey(correspondingServiceName) && CollectionUtils.isNotEmpty(SERVICE_INSTANCE_LIST_MAP.get(correspondingServiceName))) {\n-                allInstances.addAll(SERVICE_INSTANCE_LIST_MAP.get(correspondingServiceName));\n-            }\n-        }\n-        return allInstances;\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.nacos.util;\r\n+\r\n+import com.alibaba.nacos.api.naming.pojo.Instance;\r\n+import com.google.common.collect.Lists;\r\n+import com.google.common.collect.Maps;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+\r\n+/**\r\n+ * Instance manage util for multiple serviceNames\r\n+ * To resolve bug with https://github.com/apache/dubbo/issues/5885 and https://github.com/apache/dubbo/issues/5899\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class NacosInstanceManageUtil {\r\n+\r\n+    /**\r\n+     * serviceName -> refreshed instance list\r\n+     */\r\n+    private static final Map<String, List<Instance>> SERVICE_INSTANCE_LIST_MAP = Maps.newConcurrentMap();\r\n+\r\n+    /**\r\n+     * serviceName -> corresponding serviceName list\r\n+     */\r\n+    private static final Map<String, Set<String>> CORRESPONDING_SERVICE_NAMES_MAP = Maps.newConcurrentMap();\r\n+\r\n+    public static void setCorrespondingServiceNames(String serviceName, Set<String> serviceNames) {\r\n+        CORRESPONDING_SERVICE_NAMES_MAP.put(serviceName, serviceNames);\r\n+    }\r\n+\r\n+    public static void initOrRefreshServiceInstanceList(String serviceName, List<Instance> instanceList) {\r\n+        SERVICE_INSTANCE_LIST_MAP.put(serviceName, instanceList);\r\n+    }\r\n+\r\n+    public static List<Instance> getAllCorrespondingServiceInstanceList(String serviceName) {\r\n+        if (!CORRESPONDING_SERVICE_NAMES_MAP.containsKey(serviceName)) {\r\n+            return Lists.newArrayList();\r\n+        }\r\n+        List<Instance> allInstances = Lists.newArrayList();\r\n+        for (String correspondingServiceName : CORRESPONDING_SERVICE_NAMES_MAP.get(serviceName)) {\r\n+            if (SERVICE_INSTANCE_LIST_MAP.containsKey(correspondingServiceName) && CollectionUtils.isNotEmpty(SERVICE_INSTANCE_LIST_MAP.get(correspondingServiceName))) {\r\n+                allInstances.addAll(SERVICE_INSTANCE_LIST_MAP.get(correspondingServiceName));\r\n+            }\r\n+        }\r\n+        return allInstances;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/nacos/util/NacosNamingServiceUtils.java", "source2": "org/apache/dubbo/registry/nacos/util/NacosNamingServiceUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,189 +1,189 @@\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.nacos.util;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.registry.client.DefaultServiceInstance;\n-import org.apache.dubbo.registry.client.ServiceInstance;\n-import org.apache.dubbo.registry.nacos.NacosNamingServiceWrapper;\n-\n-import com.alibaba.nacos.api.NacosFactory;\n-import com.alibaba.nacos.api.PropertyKeyConst;\n-import com.alibaba.nacos.api.exception.NacosException;\n-import com.alibaba.nacos.api.naming.NamingService;\n-import com.alibaba.nacos.api.naming.PreservedMetadataKeys;\n-import com.alibaba.nacos.api.naming.pojo.Instance;\n-import com.alibaba.nacos.api.naming.utils.NamingUtils;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.Properties;\n-\n-import static com.alibaba.nacos.api.PropertyKeyConst.NAMING_LOAD_CACHE_AT_START;\n-import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;\n-import static com.alibaba.nacos.api.common.Constants.DEFAULT_GROUP;\n-import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;\n-import static org.apache.dubbo.common.utils.StringConstantFieldValuePredicate.of;\n-\n-/**\n- * The utilities class for {@link NamingService}\n- *\n- * @since 2.7.5\n- */\n-public class NacosNamingServiceUtils {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(NacosNamingServiceUtils.class);\n-\n-    /**\n-     * Convert the {@link ServiceInstance} to {@link Instance}\n-     *\n-     * @param serviceInstance {@link ServiceInstance}\n-     * @return non-null\n-     * @since 2.7.5\n-     */\n-    public static Instance toInstance(ServiceInstance serviceInstance) {\n-        Instance instance = new Instance();\n-        instance.setInstanceId(serviceInstance.getId());\n-        instance.setServiceName(serviceInstance.getServiceName());\n-        instance.setIp(serviceInstance.getHost());\n-        instance.setPort(serviceInstance.getPort());\n-        instance.setMetadata(serviceInstance.getMetadata());\n-        instance.setEnabled(serviceInstance.isEnabled());\n-        instance.setHealthy(serviceInstance.isHealthy());\n-        return instance;\n-    }\n-\n-    /**\n-     * Convert the {@link Instance} to {@link ServiceInstance}\n-     *\n-     * @param instance {@link Instance}\n-     * @return non-null\n-     * @since 2.7.5\n-     */\n-    public static ServiceInstance toServiceInstance(Instance instance) {\n-        DefaultServiceInstance serviceInstance = new DefaultServiceInstance(instance.getInstanceId(),\n-                NamingUtils.getServiceName(instance.getServiceName()), instance.getIp(), instance.getPort());\n-        serviceInstance.setMetadata(instance.getMetadata());\n-        serviceInstance.setEnabled(instance.isEnabled());\n-        serviceInstance.setHealthy(instance.isHealthy());\n-        return serviceInstance;\n-    }\n-\n-    /**\n-     * The group of {@link NamingService} to register\n-     *\n-     * @param connectionURL {@link URL connection url}\n-     * @return non-null, \"default\" as default\n-     * @since 2.7.5\n-     */\n-    public static String getGroup(URL connectionURL) {\n-        return connectionURL.getParameter(\"nacos.group\", DEFAULT_GROUP);\n-    }\n-\n-    /**\n-     * Create an instance of {@link NamingService} from specified {@link URL connection url}\n-     *\n-     * @param connectionURL {@link URL connection url}\n-     * @return {@link NamingService}\n-     * @since 2.7.5\n-     */\n-    public static NacosNamingServiceWrapper createNamingService(URL connectionURL) {\n-        Properties nacosProperties = buildNacosProperties(connectionURL);\n-        NamingService namingService;\n-        try {\n-            namingService = NacosFactory.createNamingService(nacosProperties);\n-        } catch (NacosException e) {\n-            if (logger.isErrorEnabled()) {\n-                logger.error(e.getErrMsg(), e);\n-            }\n-            throw new IllegalStateException(e);\n-        }\n-        return new NacosNamingServiceWrapper(namingService);\n-    }\n-\n-    private static Properties buildNacosProperties(URL url) {\n-        Properties properties = new Properties();\n-        setServerAddr(url, properties);\n-        setProperties(url, properties);\n-        return properties;\n-    }\n-\n-    private static void setServerAddr(URL url, Properties properties) {\n-        StringBuilder serverAddrBuilder =\n-                new StringBuilder(url.getHost()) // Host\n-                        .append(\":\")\n-                        .append(url.getPort()); // Port\n-\n-        // Append backup parameter as other servers\n-        String backup = url.getParameter(BACKUP_KEY);\n-        if (backup != null) {\n-            serverAddrBuilder.append(\",\").append(backup);\n-        }\n-\n-        String serverAddr = serverAddrBuilder.toString();\n-        properties.put(SERVER_ADDR, serverAddr);\n-    }\n-\n-    private static void setProperties(URL url, Properties properties) {\n-        // @since 2.7.8 : Refactoring\n-        // Get the parameters from constants\n-        Map<String, String> parameters = url.getParameters(of(PropertyKeyConst.class));\n-        // Put all parameters\n-        properties.putAll(parameters);\n-\n-        putPropertyIfAbsent(url, properties, NAMING_LOAD_CACHE_AT_START, \"true\");\n-    }\n-\n-    private static void putPropertyIfAbsent(URL url, Properties properties, String propertyName) {\n-        String propertyValue = url.getParameter(propertyName);\n-        if (StringUtils.isNotEmpty(propertyValue)) {\n-            properties.setProperty(propertyName, propertyValue);\n-        }\n-    }\n-\n-    private static void putPropertyIfAbsent(URL url, Properties properties, String propertyName, String defaultValue) {\n-        String propertyValue = url.getParameter(propertyName);\n-        if (StringUtils.isNotEmpty(propertyValue)) {\n-            properties.setProperty(propertyName, propertyValue);\n-        } else {\n-            properties.setProperty(propertyName, defaultValue);\n-        }\n-    }\n-\n-    public static Map<String, String> getNacosPreservedParam(URL registryUrl) {\n-        Map<String, String> map = new HashMap<>();\n-        if (registryUrl.getParameter(PreservedMetadataKeys.REGISTER_SOURCE) != null) {\n-            map.put(PreservedMetadataKeys.REGISTER_SOURCE, registryUrl.getParameter(PreservedMetadataKeys.REGISTER_SOURCE));\n-        }\n-        if (registryUrl.getParameter(PreservedMetadataKeys.HEART_BEAT_TIMEOUT) != null) {\n-            map.put(PreservedMetadataKeys.HEART_BEAT_TIMEOUT, registryUrl.getParameter(PreservedMetadataKeys.HEART_BEAT_TIMEOUT));\n-        }\n-        if (registryUrl.getParameter(PreservedMetadataKeys.IP_DELETE_TIMEOUT) != null) {\n-            map.put(PreservedMetadataKeys.IP_DELETE_TIMEOUT, registryUrl.getParameter(PreservedMetadataKeys.IP_DELETE_TIMEOUT));\n-        }\n-        if (registryUrl.getParameter(PreservedMetadataKeys.HEART_BEAT_INTERVAL) != null) {\n-            map.put(PreservedMetadataKeys.HEART_BEAT_INTERVAL, registryUrl.getParameter(PreservedMetadataKeys.HEART_BEAT_INTERVAL));\n-        }\n-        if (registryUrl.getParameter(PreservedMetadataKeys.INSTANCE_ID_GENERATOR) != null) {\n-            map.put(PreservedMetadataKeys.INSTANCE_ID_GENERATOR, registryUrl.getParameter(PreservedMetadataKeys.INSTANCE_ID_GENERATOR));\n-        }\n-        return map;\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.nacos.util;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.registry.client.DefaultServiceInstance;\r\n+import org.apache.dubbo.registry.client.ServiceInstance;\r\n+import org.apache.dubbo.registry.nacos.NacosNamingServiceWrapper;\r\n+\r\n+import com.alibaba.nacos.api.NacosFactory;\r\n+import com.alibaba.nacos.api.PropertyKeyConst;\r\n+import com.alibaba.nacos.api.exception.NacosException;\r\n+import com.alibaba.nacos.api.naming.NamingService;\r\n+import com.alibaba.nacos.api.naming.PreservedMetadataKeys;\r\n+import com.alibaba.nacos.api.naming.pojo.Instance;\r\n+import com.alibaba.nacos.api.naming.utils.NamingUtils;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.Properties;\r\n+\r\n+import static com.alibaba.nacos.api.PropertyKeyConst.NAMING_LOAD_CACHE_AT_START;\r\n+import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;\r\n+import static com.alibaba.nacos.api.common.Constants.DEFAULT_GROUP;\r\n+import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;\r\n+import static org.apache.dubbo.common.utils.StringConstantFieldValuePredicate.of;\r\n+\r\n+/**\r\n+ * The utilities class for {@link NamingService}\r\n+ *\r\n+ * @since 2.7.5\r\n+ */\r\n+public class NacosNamingServiceUtils {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(NacosNamingServiceUtils.class);\r\n+\r\n+    /**\r\n+     * Convert the {@link ServiceInstance} to {@link Instance}\r\n+     *\r\n+     * @param serviceInstance {@link ServiceInstance}\r\n+     * @return non-null\r\n+     * @since 2.7.5\r\n+     */\r\n+    public static Instance toInstance(ServiceInstance serviceInstance) {\r\n+        Instance instance = new Instance();\r\n+        instance.setInstanceId(serviceInstance.getId());\r\n+        instance.setServiceName(serviceInstance.getServiceName());\r\n+        instance.setIp(serviceInstance.getHost());\r\n+        instance.setPort(serviceInstance.getPort());\r\n+        instance.setMetadata(serviceInstance.getMetadata());\r\n+        instance.setEnabled(serviceInstance.isEnabled());\r\n+        instance.setHealthy(serviceInstance.isHealthy());\r\n+        return instance;\r\n+    }\r\n+\r\n+    /**\r\n+     * Convert the {@link Instance} to {@link ServiceInstance}\r\n+     *\r\n+     * @param instance {@link Instance}\r\n+     * @return non-null\r\n+     * @since 2.7.5\r\n+     */\r\n+    public static ServiceInstance toServiceInstance(Instance instance) {\r\n+        DefaultServiceInstance serviceInstance = new DefaultServiceInstance(instance.getInstanceId(),\r\n+                NamingUtils.getServiceName(instance.getServiceName()), instance.getIp(), instance.getPort());\r\n+        serviceInstance.setMetadata(instance.getMetadata());\r\n+        serviceInstance.setEnabled(instance.isEnabled());\r\n+        serviceInstance.setHealthy(instance.isHealthy());\r\n+        return serviceInstance;\r\n+    }\r\n+\r\n+    /**\r\n+     * The group of {@link NamingService} to register\r\n+     *\r\n+     * @param connectionURL {@link URL connection url}\r\n+     * @return non-null, \"default\" as default\r\n+     * @since 2.7.5\r\n+     */\r\n+    public static String getGroup(URL connectionURL) {\r\n+        return connectionURL.getParameter(\"nacos.group\", DEFAULT_GROUP);\r\n+    }\r\n+\r\n+    /**\r\n+     * Create an instance of {@link NamingService} from specified {@link URL connection url}\r\n+     *\r\n+     * @param connectionURL {@link URL connection url}\r\n+     * @return {@link NamingService}\r\n+     * @since 2.7.5\r\n+     */\r\n+    public static NacosNamingServiceWrapper createNamingService(URL connectionURL) {\r\n+        Properties nacosProperties = buildNacosProperties(connectionURL);\r\n+        NamingService namingService;\r\n+        try {\r\n+            namingService = NacosFactory.createNamingService(nacosProperties);\r\n+        } catch (NacosException e) {\r\n+            if (logger.isErrorEnabled()) {\r\n+                logger.error(e.getErrMsg(), e);\r\n+            }\r\n+            throw new IllegalStateException(e);\r\n+        }\r\n+        return new NacosNamingServiceWrapper(namingService);\r\n+    }\r\n+\r\n+    private static Properties buildNacosProperties(URL url) {\r\n+        Properties properties = new Properties();\r\n+        setServerAddr(url, properties);\r\n+        setProperties(url, properties);\r\n+        return properties;\r\n+    }\r\n+\r\n+    private static void setServerAddr(URL url, Properties properties) {\r\n+        StringBuilder serverAddrBuilder =\r\n+                new StringBuilder(url.getHost()) // Host\r\n+                        .append(\":\")\r\n+                        .append(url.getPort()); // Port\r\n+\r\n+        // Append backup parameter as other servers\r\n+        String backup = url.getParameter(BACKUP_KEY);\r\n+        if (backup != null) {\r\n+            serverAddrBuilder.append(\",\").append(backup);\r\n+        }\r\n+\r\n+        String serverAddr = serverAddrBuilder.toString();\r\n+        properties.put(SERVER_ADDR, serverAddr);\r\n+    }\r\n+\r\n+    private static void setProperties(URL url, Properties properties) {\r\n+        // @since 2.7.8 : Refactoring\r\n+        // Get the parameters from constants\r\n+        Map<String, String> parameters = url.getParameters(of(PropertyKeyConst.class));\r\n+        // Put all parameters\r\n+        properties.putAll(parameters);\r\n+\r\n+        putPropertyIfAbsent(url, properties, NAMING_LOAD_CACHE_AT_START, \"true\");\r\n+    }\r\n+\r\n+    private static void putPropertyIfAbsent(URL url, Properties properties, String propertyName) {\r\n+        String propertyValue = url.getParameter(propertyName);\r\n+        if (StringUtils.isNotEmpty(propertyValue)) {\r\n+            properties.setProperty(propertyName, propertyValue);\r\n+        }\r\n+    }\r\n+\r\n+    private static void putPropertyIfAbsent(URL url, Properties properties, String propertyName, String defaultValue) {\r\n+        String propertyValue = url.getParameter(propertyName);\r\n+        if (StringUtils.isNotEmpty(propertyValue)) {\r\n+            properties.setProperty(propertyName, propertyValue);\r\n+        } else {\r\n+            properties.setProperty(propertyName, defaultValue);\r\n+        }\r\n+    }\r\n+\r\n+    public static Map<String, String> getNacosPreservedParam(URL registryUrl) {\r\n+        Map<String, String> map = new HashMap<>();\r\n+        if (registryUrl.getParameter(PreservedMetadataKeys.REGISTER_SOURCE) != null) {\r\n+            map.put(PreservedMetadataKeys.REGISTER_SOURCE, registryUrl.getParameter(PreservedMetadataKeys.REGISTER_SOURCE));\r\n+        }\r\n+        if (registryUrl.getParameter(PreservedMetadataKeys.HEART_BEAT_TIMEOUT) != null) {\r\n+            map.put(PreservedMetadataKeys.HEART_BEAT_TIMEOUT, registryUrl.getParameter(PreservedMetadataKeys.HEART_BEAT_TIMEOUT));\r\n+        }\r\n+        if (registryUrl.getParameter(PreservedMetadataKeys.IP_DELETE_TIMEOUT) != null) {\r\n+            map.put(PreservedMetadataKeys.IP_DELETE_TIMEOUT, registryUrl.getParameter(PreservedMetadataKeys.IP_DELETE_TIMEOUT));\r\n+        }\r\n+        if (registryUrl.getParameter(PreservedMetadataKeys.HEART_BEAT_INTERVAL) != null) {\r\n+            map.put(PreservedMetadataKeys.HEART_BEAT_INTERVAL, registryUrl.getParameter(PreservedMetadataKeys.HEART_BEAT_INTERVAL));\r\n+        }\r\n+        if (registryUrl.getParameter(PreservedMetadataKeys.INSTANCE_ID_GENERATOR) != null) {\r\n+            map.put(PreservedMetadataKeys.INSTANCE_ID_GENERATOR, registryUrl.getParameter(PreservedMetadataKeys.INSTANCE_ID_GENERATOR));\r\n+        }\r\n+        return map;\r\n+    }\r\n+}\r\n"}]}
