{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,24 +1,24 @@\n-Zip file size: 54749 bytes, number of entries: 22\n+Zip file size: 55292 bytes, number of entries: 22\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n -rw----     2.0 fat    11590 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       56 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.registry.RegistryFactory\n--rw----     2.0 fat       58 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscovery\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        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-etcd3/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-registry-etcd3/pom.properties\n--rw----     2.0 fat     2300 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-registry-etcd3/pom.xml\n+-rw----     2.0 fat     2245 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-registry-etcd3/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/etcd/\n--rw----     2.0 fat    15864 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/etcd/EtcdRegistry.java\n--rw----     2.0 fat     1409 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/etcd/EtcdRegistryFactory.java\n--rw----     2.0 fat     8180 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/etcd/EtcdServiceDiscovery.java\n-22 files, 51017 bytes uncompressed, 51017 bytes compressed:  0.0%\n+-rw----     2.0 fat    16219 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/etcd/EtcdRegistry.java\n+-rw----     2.0 fat     1445 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/etcd/EtcdRegistryFactory.java\n+-rw----     2.0 fat     8386 bX stor 70-Jan-01 00:00 org/apache/dubbo/registry/etcd/EtcdServiceDiscovery.java\n+22 files, 51560 bytes uncompressed, 51560 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -220,982 +220,982 @@\n # WARNING: Offset 0x5D05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 5D4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 5D50   Length              0005 (5)\n 5D52   Flags               01 (1) 'Modification'\n 5D53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-5D57 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5D57 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-5D91 DATA DESCRIPTOR       08074B50 (134695760)\n-5D95 CRC                   09788912 (158894354)\n-5D99 Compressed Size       0000003A (58)\n-5D9D Uncompressed Size     0000003A (58)\n-\n-5DA1 LOCAL HEADER #10      04034B50 (67324752)\n-5DA5 Extract Zip Spec      14 (20) '2.0'\n-5DA6 Extract OS            00 (0) 'MS-DOS'\n-5DA7 General Purpose Flag  0000 (0)\n-5DA9 Compression Method    0000 (0) 'Stored'\n-5DAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5DAF CRC                   00000000 (0)\n-5DB3 Compressed Size       00000000 (0)\n-5DB7 Uncompressed Size     00000000 (0)\n-5DBB Filename Length       000F (15)\n-5DBD Extra Length          0009 (9)\n-5DBF Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5DBF: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5DCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5DD0   Length              0005 (5)\n-5DD2   Flags               01 (1) 'Modification'\n-5DD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5DD7 LOCAL HEADER #11      04034B50 (67324752)\n-5DDB Extract Zip Spec      14 (20) '2.0'\n-5DDC Extract OS            00 (0) 'MS-DOS'\n-5DDD General Purpose Flag  0000 (0)\n-5DDF Compression Method    0000 (0) 'Stored'\n-5DE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5DE5 CRC                   00000000 (0)\n-5DE9 Compressed Size       00000000 (0)\n-5DED Uncompressed Size     00000000 (0)\n-5DF1 Filename Length       0020 (32)\n-5DF3 Extra Length          0009 (9)\n-5DF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5DF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5E15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5E17   Length              0005 (5)\n-5E19   Flags               01 (1) 'Modification'\n-5E1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5E1E LOCAL HEADER #12      04034B50 (67324752)\n-5E22 Extract Zip Spec      14 (20) '2.0'\n-5E23 Extract OS            00 (0) 'MS-DOS'\n-5E24 General Purpose Flag  0000 (0)\n-5E26 Compression Method    0000 (0) 'Stored'\n-5E28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5E2C CRC                   00000000 (0)\n-5E30 Compressed Size       00000000 (0)\n-5E34 Uncompressed Size     00000000 (0)\n-5E38 Filename Length       0035 (53)\n-5E3A Extra Length          0009 (9)\n-5E3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5E3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5E71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5E73   Length              0005 (5)\n-5E75   Flags               01 (1) 'Modification'\n-5E76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5E7A LOCAL HEADER #13      04034B50 (67324752)\n-5E7E Extract Zip Spec      14 (20) '2.0'\n-5E7F Extract OS            00 (0) 'MS-DOS'\n-5E80 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-5E82 Compression Method    0000 (0) 'Stored'\n-5E84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5E88 CRC                   00000000 (0)\n-5E8C Compressed Size       00000000 (0)\n-5E90 Uncompressed Size     00000000 (0)\n-5E94 Filename Length       0043 (67)\n-5E96 Extra Length          0009 (9)\n-5E98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5E98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5EDB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5EDD   Length              0005 (5)\n-5EDF   Flags               01 (1) 'Modification'\n-5EE0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5EE4 DATA DESCRIPTOR       08074B50 (134695760)\n-5EE8 CRC                   00000000 (0)\n-5EEC Compressed Size       00000000 (0)\n-5EF0 Uncompressed Size     00000000 (0)\n-\n-5EF4 LOCAL HEADER #14      04034B50 (67324752)\n-5EF8 Extract Zip Spec      14 (20) '2.0'\n-5EF9 Extract OS            00 (0) 'MS-DOS'\n-5EFA General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-5EFC Compression Method    0000 (0) 'Stored'\n-5EFE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5F02 CRC                   00000000 (0)\n-5F06 Compressed Size       00000000 (0)\n-5F0A Uncompressed Size     00000000 (0)\n-5F0E Filename Length       003C (60)\n-5F10 Extra Length          0009 (9)\n-5F12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5F12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5F4E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5F50   Length              0005 (5)\n-5F52   Flags               01 (1) 'Modification'\n-5F53   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-5F57 PAYLOAD\n-\n-6853 DATA DESCRIPTOR       08074B50 (134695760)\n-6857 CRC                   8F421884 (2403473540)\n-685B Compressed Size       000008FC (2300)\n-685F Uncompressed Size     000008FC (2300)\n-\n-6863 LOCAL HEADER #15      04034B50 (67324752)\n-6867 Extract Zip Spec      14 (20) '2.0'\n-6868 Extract OS            00 (0) 'MS-DOS'\n-6869 General Purpose Flag  0000 (0)\n-686B Compression Method    0000 (0) 'Stored'\n-686D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6871 CRC                   00000000 (0)\n-6875 Compressed Size       00000000 (0)\n-6879 Uncompressed Size     00000000 (0)\n-687D Filename Length       0004 (4)\n-687F Extra Length          0009 (9)\n-6881 Filename              'XXXX'\n-#\n-# WARNING: Offset 0x6881: Filename 'XXXX'\n-#          Zero length filename\n-#\n-6885 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6887   Length              0005 (5)\n-6889   Flags               01 (1) 'Modification'\n-688A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-688E LOCAL HEADER #16      04034B50 (67324752)\n-6892 Extract Zip Spec      14 (20) '2.0'\n-6893 Extract OS            00 (0) 'MS-DOS'\n-6894 General Purpose Flag  0000 (0)\n-6896 Compression Method    0000 (0) 'Stored'\n-6898 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-689C CRC                   00000000 (0)\n-68A0 Compressed Size       00000000 (0)\n-68A4 Uncompressed Size     00000000 (0)\n-68A8 Filename Length       000B (11)\n-68AA Extra Length          0009 (9)\n-68AC Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x68AC: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-68B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-68B9   Length              0005 (5)\n-68BB   Flags               01 (1) 'Modification'\n-68BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-68C0 LOCAL HEADER #17      04034B50 (67324752)\n-68C4 Extract Zip Spec      14 (20) '2.0'\n-68C5 Extract OS            00 (0) 'MS-DOS'\n-68C6 General Purpose Flag  0000 (0)\n-68C8 Compression Method    0000 (0) 'Stored'\n-68CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-68CE CRC                   00000000 (0)\n-68D2 Compressed Size       00000000 (0)\n-68D6 Uncompressed Size     00000000 (0)\n-68DA Filename Length       0011 (17)\n-68DC Extra Length          0009 (9)\n-68DE Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x68DE: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-68EF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-68F1   Length              0005 (5)\n-68F3   Flags               01 (1) 'Modification'\n-68F4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-68F8 LOCAL HEADER #18      04034B50 (67324752)\n-68FC Extract Zip Spec      14 (20) '2.0'\n-68FD Extract OS            00 (0) 'MS-DOS'\n-68FE General Purpose Flag  0000 (0)\n-6900 Compression Method    0000 (0) 'Stored'\n-6902 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6906 CRC                   00000000 (0)\n-690A Compressed Size       00000000 (0)\n-690E Uncompressed Size     00000000 (0)\n-6912 Filename Length       001A (26)\n-6914 Extra Length          0009 (9)\n-6916 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6916: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6930 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6932   Length              0005 (5)\n-6934   Flags               01 (1) 'Modification'\n-6935   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-6939 LOCAL HEADER #19      04034B50 (67324752)\n-693D Extract Zip Spec      14 (20) '2.0'\n-693E Extract OS            00 (0) 'MS-DOS'\n-693F General Purpose Flag  0000 (0)\n-6941 Compression Method    0000 (0) 'Stored'\n-6943 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-6947 CRC                   00000000 (0)\n-694B Compressed Size       00000000 (0)\n-694F Uncompressed Size     00000000 (0)\n-6953 Filename Length       001F (31)\n-6955 Extra Length          0009 (9)\n-6957 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6957: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-6976 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-6978   Length              0005 (5)\n-697A   Flags               01 (1) 'Modification'\n-697B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-697F LOCAL HEADER #20      04034B50 (67324752)\n-6983 Extract Zip Spec      14 (20) '2.0'\n-6984 Extract OS            00 (0) 'MS-DOS'\n-6985 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-6987 Compression Method    0000 (0) 'Stored'\n-6989 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-698D CRC                   00000000 (0)\n-6991 Compressed Size       00000000 (0)\n-6995 Uncompressed Size     00000000 (0)\n-6999 Filename Length       0030 (48)\n-699B Extra Length          0009 (9)\n-699D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x699D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-69CD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-69CF   Length              0005 (5)\n-69D1   Flags               01 (1) 'Modification'\n-69D2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-69D6 PAYLOAD\n-\n-A7CE DATA DESCRIPTOR       08074B50 (134695760)\n-A7D2 CRC                   E5134667 (3843245671)\n-A7D6 Compressed Size       00003DF8 (15864)\n-A7DA Uncompressed Size     00003DF8 (15864)\n-\n-A7DE LOCAL HEADER #21      04034B50 (67324752)\n-A7E2 Extract Zip Spec      14 (20) '2.0'\n-A7E3 Extract OS            00 (0) 'MS-DOS'\n-A7E4 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-A7E6 Compression Method    0000 (0) 'Stored'\n-A7E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-A7EC CRC                   00000000 (0)\n-A7F0 Compressed Size       00000000 (0)\n-A7F4 Uncompressed Size     00000000 (0)\n-A7F8 Filename Length       0037 (55)\n-A7FA Extra Length          0009 (9)\n-A7FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA7FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-A833 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-A835   Length              0005 (5)\n-A837   Flags               01 (1) 'Modification'\n-A838   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-A83C PAYLOAD\n-\n-ADBD DATA DESCRIPTOR       08074B50 (134695760)\n-ADC1 CRC                   EAAFA7AC (3937380268)\n-ADC5 Compressed Size       00000581 (1409)\n-ADC9 Uncompressed Size     00000581 (1409)\n-\n-ADCD LOCAL HEADER #22      04034B50 (67324752)\n-ADD1 Extract Zip Spec      14 (20) '2.0'\n-ADD2 Extract OS            00 (0) 'MS-DOS'\n-ADD3 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-ADD5 Compression Method    0000 (0) 'Stored'\n-ADD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-ADDB CRC                   00000000 (0)\n-ADDF Compressed Size       00000000 (0)\n-ADE3 Uncompressed Size     00000000 (0)\n-ADE7 Filename Length       0038 (56)\n-ADE9 Extra Length          0009 (9)\n-ADEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xADEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-AE23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-AE25   Length              0005 (5)\n-AE27   Flags               01 (1) 'Modification'\n-AE28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-AE2C PAYLOAD\n-\n-CE20 DATA DESCRIPTOR       08074B50 (134695760)\n-CE24 CRC                   D94FAF9D (3645878173)\n-CE28 Compressed Size       00001FF4 (8180)\n-CE2C Uncompressed Size     00001FF4 (8180)\n-\n-CE30 CENTRAL HEADER #1     02014B50 (33639248)\n-CE34 Created Zip Spec      14 (20) '2.0'\n-CE35 Created OS            00 (0) 'MS-DOS'\n-CE36 Extract Zip Spec      14 (20) '2.0'\n-CE37 Extract OS            00 (0) 'MS-DOS'\n-CE38 General Purpose Flag  0000 (0)\n-CE3A Compression Method    0000 (0) 'Stored'\n-CE3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-CE40 CRC                   00000000 (0)\n-CE44 Compressed Size       00000000 (0)\n-CE48 Uncompressed Size     00000000 (0)\n-CE4C Filename Length       0009 (9)\n-CE4E Extra Length          0009 (9)\n-CE50 Comment Length        0000 (0)\n-CE52 Disk Start            0000 (0)\n-CE54 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-CE56 Ext File Attributes   00000000 (0)\n-CE5A Local Header Offset   00000000 (0)\n-CE5E Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0xCE5E: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-CE67 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-CE69   Length              0005 (5)\n-CE6B   Flags               01 (1) 'Modification'\n-CE6C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-CE70 CENTRAL HEADER #2     02014B50 (33639248)\n-CE74 Created Zip Spec      14 (20) '2.0'\n-CE75 Created OS            00 (0) 'MS-DOS'\n-CE76 Extract Zip Spec      14 (20) '2.0'\n-CE77 Extract OS            00 (0) 'MS-DOS'\n-CE78 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-CE7A Compression Method    0000 (0) 'Stored'\n-CE7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-CE80 CRC                   36ACB63B (917288507)\n-CE84 Compressed Size       00002D46 (11590)\n-CE88 Uncompressed Size     00002D46 (11590)\n-CE8C Filename Length       0015 (21)\n-CE8E Extra Length          0009 (9)\n-CE90 Comment Length        0000 (0)\n-CE92 Disk Start            0000 (0)\n-CE94 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-CE96 Ext File Attributes   00000000 (0)\n-CE9A Local Header Offset   00000030 (48)\n-CE9E Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCE9E: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-CEB3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-CEB5   Length              0005 (5)\n-CEB7   Flags               01 (1) 'Modification'\n-CEB8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-CEBC CENTRAL HEADER #3     02014B50 (33639248)\n-CEC0 Created Zip Spec      14 (20) '2.0'\n-CEC1 Created OS            00 (0) 'MS-DOS'\n-CEC2 Extract Zip Spec      14 (20) '2.0'\n-CEC3 Extract OS            00 (0) 'MS-DOS'\n-CEC4 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-CEC6 Compression Method    0000 (0) 'Stored'\n-CEC8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-CECC CRC                   86E2B4B4 (2263004340)\n-CED0 Compressed Size       00002C5E (11358)\n-CED4 Uncompressed Size     00002C5E (11358)\n-CED8 Filename Length       0010 (16)\n-CEDA Extra Length          0009 (9)\n-CEDC Comment Length        0000 (0)\n-CEDE Disk Start            0000 (0)\n-CEE0 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-CEE2 Ext File Attributes   00000000 (0)\n-CEE6 Local Header Offset   00002DC2 (11714)\n-CEEA Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCEEA: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-CEFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-CEFC   Length              0005 (5)\n-CEFE   Flags               01 (1) 'Modification'\n-CEFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-CF03 CENTRAL HEADER #4     02014B50 (33639248)\n-CF07 Created Zip Spec      14 (20) '2.0'\n-CF08 Created OS            00 (0) 'MS-DOS'\n-CF09 Extract Zip Spec      14 (20) '2.0'\n-CF0A Extract OS            00 (0) 'MS-DOS'\n-CF0B General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-CF0D Compression Method    0000 (0) 'Stored'\n-CF0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-CF13 CRC                   EE027FB2 (3993141170)\n-CF17 Compressed Size       00000019 (25)\n-CF1B Uncompressed Size     00000019 (25)\n-CF1F Filename Length       0014 (20)\n-CF21 Extra Length          0009 (9)\n-CF23 Comment Length        0000 (0)\n-CF25 Disk Start            0000 (0)\n-CF27 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-CF29 Ext File Attributes   00000000 (0)\n-CF2D Local Header Offset   00005A67 (23143)\n-CF31 Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCF31: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-CF45 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-CF47   Length              0005 (5)\n-CF49   Flags               01 (1) 'Modification'\n-CF4A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-CF4E CENTRAL HEADER #5     02014B50 (33639248)\n-CF52 Created Zip Spec      14 (20) '2.0'\n-CF53 Created OS            00 (0) 'MS-DOS'\n-CF54 Extract Zip Spec      14 (20) '2.0'\n-CF55 Extract OS            00 (0) 'MS-DOS'\n-CF56 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-CF58 Compression Method    0000 (0) 'Stored'\n-CF5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-CF5E CRC                   0B8AFFD7 (193658839)\n-CF62 Compressed Size       000000B1 (177)\n-CF66 Uncompressed Size     000000B1 (177)\n-CF6A Filename Length       000F (15)\n-CF6C Extra Length          0009 (9)\n-CF6E Comment Length        0000 (0)\n-CF70 Disk Start            0000 (0)\n-CF72 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-CF74 Ext File Attributes   00000000 (0)\n-CF78 Local Header Offset   00005ACB (23243)\n-CF7C Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCF7C: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-CF8B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-CF8D   Length              0005 (5)\n-CF8F   Flags               01 (1) 'Modification'\n-CF90   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-CF94 CENTRAL HEADER #6     02014B50 (33639248)\n-CF98 Created Zip Spec      14 (20) '2.0'\n-CF99 Created OS            00 (0) 'MS-DOS'\n-CF9A Extract Zip Spec      14 (20) '2.0'\n-CF9B Extract OS            00 (0) 'MS-DOS'\n-CF9C General Purpose Flag  0000 (0)\n-CF9E Compression Method    0000 (0) 'Stored'\n-CFA0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-CFA4 CRC                   00000000 (0)\n-CFA8 Compressed Size       00000000 (0)\n-CFAC Uncompressed Size     00000000 (0)\n-CFB0 Filename Length       000F (15)\n-CFB2 Extra Length          0009 (9)\n-CFB4 Comment Length        0000 (0)\n-CFB6 Disk Start            0000 (0)\n-CFB8 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-CFBA Ext File Attributes   00000000 (0)\n-CFBE Local Header Offset   00005BC2 (23490)\n-CFC2 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCFC2: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-CFD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-CFD3   Length              0005 (5)\n-CFD5   Flags               01 (1) 'Modification'\n-CFD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-CFDA CENTRAL HEADER #7     02014B50 (33639248)\n-CFDE Created Zip Spec      14 (20) '2.0'\n-CFDF Created OS            00 (0) 'MS-DOS'\n-CFE0 Extract Zip Spec      14 (20) '2.0'\n-CFE1 Extract OS            00 (0) 'MS-DOS'\n-CFE2 General Purpose Flag  0000 (0)\n-CFE4 Compression Method    0000 (0) 'Stored'\n-CFE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-CFEA CRC                   00000000 (0)\n-CFEE Compressed Size       00000000 (0)\n-CFF2 Uncompressed Size     00000000 (0)\n-CFF6 Filename Length       0018 (24)\n-CFF8 Extra Length          0009 (9)\n-CFFA Comment Length        0000 (0)\n-CFFC Disk Start            0000 (0)\n-CFFE Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D000 Ext File Attributes   00000000 (0)\n-D004 Local Header Offset   00005BF8 (23544)\n-D008 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD008: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D020 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D022   Length              0005 (5)\n-D024   Flags               01 (1) 'Modification'\n-D025   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D029 CENTRAL HEADER #8     02014B50 (33639248)\n-D02D Created Zip Spec      14 (20) '2.0'\n-D02E Created OS            00 (0) 'MS-DOS'\n-D02F Extract Zip Spec      14 (20) '2.0'\n-D030 Extract OS            00 (0) 'MS-DOS'\n-D031 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-D033 Compression Method    0000 (0) 'Stored'\n-D035 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D039 CRC                   8176D79D (2172049309)\n-D03D Compressed Size       00000038 (56)\n-D041 Uncompressed Size     00000038 (56)\n-D045 Filename Length       0041 (65)\n-D047 Extra Length          0009 (9)\n-D049 Comment Length        0000 (0)\n-D04B Disk Start            0000 (0)\n-D04D Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D04F Ext File Attributes   00000000 (0)\n-D053 Local Header Offset   00005C37 (23607)\n-D057 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD057: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D098 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D09A   Length              0005 (5)\n-D09C   Flags               01 (1) 'Modification'\n-D09D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D0A1 CENTRAL HEADER #9     02014B50 (33639248)\n-D0A5 Created Zip Spec      14 (20) '2.0'\n-D0A6 Created OS            00 (0) 'MS-DOS'\n-D0A7 Extract Zip Spec      14 (20) '2.0'\n-D0A8 Extract OS            00 (0) 'MS-DOS'\n-D0A9 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-D0AB Compression Method    0000 (0) 'Stored'\n-D0AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D0B1 CRC                   09788912 (158894354)\n-D0B5 Compressed Size       0000003A (58)\n-D0B9 Uncompressed Size     0000003A (58)\n-D0BD Filename Length       0049 (73)\n-D0BF Extra Length          0009 (9)\n-D0C1 Comment Length        0000 (0)\n-D0C3 Disk Start            0000 (0)\n-D0C5 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D0C7 Ext File Attributes   00000000 (0)\n-D0CB Local Header Offset   00005CE7 (23783)\n-D0CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD0CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D118 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D11A   Length              0005 (5)\n-D11C   Flags               01 (1) 'Modification'\n-D11D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D121 CENTRAL HEADER #10    02014B50 (33639248)\n-D125 Created Zip Spec      14 (20) '2.0'\n-D126 Created OS            00 (0) 'MS-DOS'\n-D127 Extract Zip Spec      14 (20) '2.0'\n-D128 Extract OS            00 (0) 'MS-DOS'\n-D129 General Purpose Flag  0000 (0)\n-D12B Compression Method    0000 (0) 'Stored'\n-D12D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D131 CRC                   00000000 (0)\n-D135 Compressed Size       00000000 (0)\n-D139 Uncompressed Size     00000000 (0)\n-D13D Filename Length       000F (15)\n-D13F Extra Length          0009 (9)\n-D141 Comment Length        0000 (0)\n-D143 Disk Start            0000 (0)\n-D145 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D147 Ext File Attributes   00000000 (0)\n-D14B Local Header Offset   00005DA1 (23969)\n-D14F Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD14F: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D15E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D160   Length              0005 (5)\n-D162   Flags               01 (1) 'Modification'\n-D163   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D167 CENTRAL HEADER #11    02014B50 (33639248)\n-D16B Created Zip Spec      14 (20) '2.0'\n-D16C Created OS            00 (0) 'MS-DOS'\n-D16D Extract Zip Spec      14 (20) '2.0'\n-D16E Extract OS            00 (0) 'MS-DOS'\n-D16F General Purpose Flag  0000 (0)\n-D171 Compression Method    0000 (0) 'Stored'\n-D173 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D177 CRC                   00000000 (0)\n-D17B Compressed Size       00000000 (0)\n-D17F Uncompressed Size     00000000 (0)\n-D183 Filename Length       0020 (32)\n-D185 Extra Length          0009 (9)\n-D187 Comment Length        0000 (0)\n-D189 Disk Start            0000 (0)\n-D18B Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D18D Ext File Attributes   00000000 (0)\n-D191 Local Header Offset   00005DD7 (24023)\n-D195 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD195: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D1B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D1B7   Length              0005 (5)\n-D1B9   Flags               01 (1) 'Modification'\n-D1BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D1BE CENTRAL HEADER #12    02014B50 (33639248)\n-D1C2 Created Zip Spec      14 (20) '2.0'\n-D1C3 Created OS            00 (0) 'MS-DOS'\n-D1C4 Extract Zip Spec      14 (20) '2.0'\n-D1C5 Extract OS            00 (0) 'MS-DOS'\n-D1C6 General Purpose Flag  0000 (0)\n-D1C8 Compression Method    0000 (0) 'Stored'\n-D1CA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D1CE CRC                   00000000 (0)\n-D1D2 Compressed Size       00000000 (0)\n-D1D6 Uncompressed Size     00000000 (0)\n-D1DA Filename Length       0035 (53)\n-D1DC Extra Length          0009 (9)\n-D1DE Comment Length        0000 (0)\n-D1E0 Disk Start            0000 (0)\n-D1E2 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D1E4 Ext File Attributes   00000000 (0)\n-D1E8 Local Header Offset   00005E1E (24094)\n-D1EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD1EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D221 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D223   Length              0005 (5)\n-D225   Flags               01 (1) 'Modification'\n-D226   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D22A CENTRAL HEADER #13    02014B50 (33639248)\n-D22E Created Zip Spec      14 (20) '2.0'\n-D22F Created OS            00 (0) 'MS-DOS'\n-D230 Extract Zip Spec      14 (20) '2.0'\n-D231 Extract OS            00 (0) 'MS-DOS'\n-D232 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-D234 Compression Method    0000 (0) 'Stored'\n-D236 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D23A CRC                   00000000 (0)\n-D23E Compressed Size       00000000 (0)\n-D242 Uncompressed Size     00000000 (0)\n-D246 Filename Length       0043 (67)\n-D248 Extra Length          0009 (9)\n-D24A Comment Length        0000 (0)\n-D24C Disk Start            0000 (0)\n-D24E Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D250 Ext File Attributes   00000000 (0)\n-D254 Local Header Offset   00005E7A (24186)\n-D258 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD258: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D29B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D29D   Length              0005 (5)\n-D29F   Flags               01 (1) 'Modification'\n-D2A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D2A4 CENTRAL HEADER #14    02014B50 (33639248)\n-D2A8 Created Zip Spec      14 (20) '2.0'\n-D2A9 Created OS            00 (0) 'MS-DOS'\n-D2AA Extract Zip Spec      14 (20) '2.0'\n-D2AB Extract OS            00 (0) 'MS-DOS'\n-D2AC General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-D2AE Compression Method    0000 (0) 'Stored'\n-D2B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D2B4 CRC                   8F421884 (2403473540)\n-D2B8 Compressed Size       000008FC (2300)\n-D2BC Uncompressed Size     000008FC (2300)\n-D2C0 Filename Length       003C (60)\n-D2C2 Extra Length          0009 (9)\n-D2C4 Comment Length        0000 (0)\n-D2C6 Disk Start            0000 (0)\n-D2C8 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D2CA Ext File Attributes   00000000 (0)\n-D2CE Local Header Offset   00005EF4 (24308)\n-D2D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD2D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D30E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D310   Length              0005 (5)\n-D312   Flags               01 (1) 'Modification'\n-D313   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D317 CENTRAL HEADER #15    02014B50 (33639248)\n-D31B Created Zip Spec      14 (20) '2.0'\n-D31C Created OS            00 (0) 'MS-DOS'\n-D31D Extract Zip Spec      14 (20) '2.0'\n-D31E Extract OS            00 (0) 'MS-DOS'\n-D31F General Purpose Flag  0000 (0)\n-D321 Compression Method    0000 (0) 'Stored'\n-D323 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D327 CRC                   00000000 (0)\n-D32B Compressed Size       00000000 (0)\n-D32F Uncompressed Size     00000000 (0)\n-D333 Filename Length       0004 (4)\n-D335 Extra Length          0009 (9)\n-D337 Comment Length        0000 (0)\n-D339 Disk Start            0000 (0)\n-D33B Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D33D Ext File Attributes   00000000 (0)\n-D341 Local Header Offset   00006863 (26723)\n-D345 Filename              'XXXX'\n-#\n-# WARNING: Offset 0xD345: Filename 'XXXX'\n-#          Zero length filename\n-#\n-D349 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D34B   Length              0005 (5)\n-D34D   Flags               01 (1) 'Modification'\n-D34E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D352 CENTRAL HEADER #16    02014B50 (33639248)\n-D356 Created Zip Spec      14 (20) '2.0'\n-D357 Created OS            00 (0) 'MS-DOS'\n-D358 Extract Zip Spec      14 (20) '2.0'\n-D359 Extract OS            00 (0) 'MS-DOS'\n-D35A General Purpose Flag  0000 (0)\n-D35C Compression Method    0000 (0) 'Stored'\n-D35E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D362 CRC                   00000000 (0)\n-D366 Compressed Size       00000000 (0)\n-D36A Uncompressed Size     00000000 (0)\n-D36E Filename Length       000B (11)\n-D370 Extra Length          0009 (9)\n-D372 Comment Length        0000 (0)\n-D374 Disk Start            0000 (0)\n-D376 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D378 Ext File Attributes   00000000 (0)\n-D37C Local Header Offset   0000688E (26766)\n-D380 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD380: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D38B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D38D   Length              0005 (5)\n-D38F   Flags               01 (1) 'Modification'\n-D390   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D394 CENTRAL HEADER #17    02014B50 (33639248)\n-D398 Created Zip Spec      14 (20) '2.0'\n-D399 Created OS            00 (0) 'MS-DOS'\n-D39A Extract Zip Spec      14 (20) '2.0'\n-D39B Extract OS            00 (0) 'MS-DOS'\n-D39C General Purpose Flag  0000 (0)\n-D39E Compression Method    0000 (0) 'Stored'\n-D3A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D3A4 CRC                   00000000 (0)\n-D3A8 Compressed Size       00000000 (0)\n-D3AC Uncompressed Size     00000000 (0)\n-D3B0 Filename Length       0011 (17)\n-D3B2 Extra Length          0009 (9)\n-D3B4 Comment Length        0000 (0)\n-D3B6 Disk Start            0000 (0)\n-D3B8 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D3BA Ext File Attributes   00000000 (0)\n-D3BE Local Header Offset   000068C0 (26816)\n-D3C2 Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD3C2: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D3D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D3D5   Length              0005 (5)\n-D3D7   Flags               01 (1) 'Modification'\n-D3D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D3DC CENTRAL HEADER #18    02014B50 (33639248)\n-D3E0 Created Zip Spec      14 (20) '2.0'\n-D3E1 Created OS            00 (0) 'MS-DOS'\n-D3E2 Extract Zip Spec      14 (20) '2.0'\n-D3E3 Extract OS            00 (0) 'MS-DOS'\n-D3E4 General Purpose Flag  0000 (0)\n-D3E6 Compression Method    0000 (0) 'Stored'\n-D3E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D3EC CRC                   00000000 (0)\n-D3F0 Compressed Size       00000000 (0)\n-D3F4 Uncompressed Size     00000000 (0)\n-D3F8 Filename Length       001A (26)\n-D3FA Extra Length          0009 (9)\n-D3FC Comment Length        0000 (0)\n-D3FE Disk Start            0000 (0)\n-D400 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D402 Ext File Attributes   00000000 (0)\n-D406 Local Header Offset   000068F8 (26872)\n-D40A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD40A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D424 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D426   Length              0005 (5)\n-D428   Flags               01 (1) 'Modification'\n-D429   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D42D CENTRAL HEADER #19    02014B50 (33639248)\n-D431 Created Zip Spec      14 (20) '2.0'\n-D432 Created OS            00 (0) 'MS-DOS'\n-D433 Extract Zip Spec      14 (20) '2.0'\n-D434 Extract OS            00 (0) 'MS-DOS'\n-D435 General Purpose Flag  0000 (0)\n-D437 Compression Method    0000 (0) 'Stored'\n-D439 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D43D CRC                   00000000 (0)\n-D441 Compressed Size       00000000 (0)\n-D445 Uncompressed Size     00000000 (0)\n-D449 Filename Length       001F (31)\n-D44B Extra Length          0009 (9)\n-D44D Comment Length        0000 (0)\n-D44F Disk Start            0000 (0)\n-D451 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D453 Ext File Attributes   00000000 (0)\n-D457 Local Header Offset   00006939 (26937)\n-D45B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD45B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D47A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D47C   Length              0005 (5)\n-D47E   Flags               01 (1) 'Modification'\n-D47F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D483 CENTRAL HEADER #20    02014B50 (33639248)\n-D487 Created Zip Spec      14 (20) '2.0'\n-D488 Created OS            00 (0) 'MS-DOS'\n-D489 Extract Zip Spec      14 (20) '2.0'\n-D48A Extract OS            00 (0) 'MS-DOS'\n-D48B General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-D48D Compression Method    0000 (0) 'Stored'\n-D48F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D493 CRC                   E5134667 (3843245671)\n-D497 Compressed Size       00003DF8 (15864)\n-D49B Uncompressed Size     00003DF8 (15864)\n-D49F Filename Length       0030 (48)\n-D4A1 Extra Length          0009 (9)\n-D4A3 Comment Length        0000 (0)\n-D4A5 Disk Start            0000 (0)\n-D4A7 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D4A9 Ext File Attributes   00000000 (0)\n-D4AD Local Header Offset   0000697F (27007)\n-D4B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD4B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D4E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D4E3   Length              0005 (5)\n-D4E5   Flags               01 (1) 'Modification'\n-D4E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D4EA CENTRAL HEADER #21    02014B50 (33639248)\n-D4EE Created Zip Spec      14 (20) '2.0'\n-D4EF Created OS            00 (0) 'MS-DOS'\n-D4F0 Extract Zip Spec      14 (20) '2.0'\n-D4F1 Extract OS            00 (0) 'MS-DOS'\n-D4F2 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-D4F4 Compression Method    0000 (0) 'Stored'\n-D4F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D4FA CRC                   EAAFA7AC (3937380268)\n-D4FE Compressed Size       00000581 (1409)\n-D502 Uncompressed Size     00000581 (1409)\n-D506 Filename Length       0037 (55)\n-D508 Extra Length          0009 (9)\n-D50A Comment Length        0000 (0)\n-D50C Disk Start            0000 (0)\n-D50E Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D510 Ext File Attributes   00000000 (0)\n-D514 Local Header Offset   0000A7DE (42974)\n-D518 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD518: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D54F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D551   Length              0005 (5)\n-D553   Flags               01 (1) 'Modification'\n-D554   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D558 CENTRAL HEADER #22    02014B50 (33639248)\n-D55C Created Zip Spec      14 (20) '2.0'\n-D55D Created OS            00 (0) 'MS-DOS'\n-D55E Extract Zip Spec      14 (20) '2.0'\n-D55F Extract OS            00 (0) 'MS-DOS'\n-D560 General Purpose Flag  0008 (8)\n-     [Bit  3]              1 'Streamed'\n-D562 Compression Method    0000 (0) 'Stored'\n-D564 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-D568 CRC                   D94FAF9D (3645878173)\n-D56C Compressed Size       00001FF4 (8180)\n-D570 Uncompressed Size     00001FF4 (8180)\n-D574 Filename Length       0038 (56)\n-D576 Extra Length          0009 (9)\n-D578 Comment Length        0000 (0)\n-D57A Disk Start            0000 (0)\n-D57C Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-D57E Ext File Attributes   00000000 (0)\n-D582 Local Header Offset   0000ADCD (44493)\n-D586 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD586: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-D5BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-D5C0   Length              0005 (5)\n-D5C2   Flags               01 (1) 'Modification'\n-D5C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-D5C7 END CENTRAL HEADER    06054B50 (101010256)\n-D5CB Number of this disk   0000 (0)\n-D5CD Central Dir Disk no   0000 (0)\n-D5CF Entries in this disk  0016 (22)\n-D5D1 Total Entries         0016 (22)\n-D5D3 Size of Central Dir   00000797 (1943)\n-D5D7 Offset to Central Dir 0000CE30 (52784)\n-D5DB Comment Length        0000 (0)\n+5D92 DATA DESCRIPTOR       08074B50 (134695760)\n+5D96 CRC                   8E269995 (2384894357)\n+5D9A Compressed Size       0000003B (59)\n+5D9E Uncompressed Size     0000003B (59)\n+\n+5DA2 LOCAL HEADER #10      04034B50 (67324752)\n+5DA6 Extract Zip Spec      14 (20) '2.0'\n+5DA7 Extract OS            00 (0) 'MS-DOS'\n+5DA8 General Purpose Flag  0000 (0)\n+5DAA Compression Method    0000 (0) 'Stored'\n+5DAC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5DB0 CRC                   00000000 (0)\n+5DB4 Compressed Size       00000000 (0)\n+5DB8 Uncompressed Size     00000000 (0)\n+5DBC Filename Length       000F (15)\n+5DBE Extra Length          0009 (9)\n+5DC0 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5DC0: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5DCF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5DD1   Length              0005 (5)\n+5DD3   Flags               01 (1) 'Modification'\n+5DD4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5DD8 LOCAL HEADER #11      04034B50 (67324752)\n+5DDC Extract Zip Spec      14 (20) '2.0'\n+5DDD Extract OS            00 (0) 'MS-DOS'\n+5DDE General Purpose Flag  0000 (0)\n+5DE0 Compression Method    0000 (0) 'Stored'\n+5DE2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5DE6 CRC                   00000000 (0)\n+5DEA Compressed Size       00000000 (0)\n+5DEE Uncompressed Size     00000000 (0)\n+5DF2 Filename Length       0020 (32)\n+5DF4 Extra Length          0009 (9)\n+5DF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5DF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5E16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5E18   Length              0005 (5)\n+5E1A   Flags               01 (1) 'Modification'\n+5E1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5E1F LOCAL HEADER #12      04034B50 (67324752)\n+5E23 Extract Zip Spec      14 (20) '2.0'\n+5E24 Extract OS            00 (0) 'MS-DOS'\n+5E25 General Purpose Flag  0000 (0)\n+5E27 Compression Method    0000 (0) 'Stored'\n+5E29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5E2D CRC                   00000000 (0)\n+5E31 Compressed Size       00000000 (0)\n+5E35 Uncompressed Size     00000000 (0)\n+5E39 Filename Length       0035 (53)\n+5E3B Extra Length          0009 (9)\n+5E3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5E3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5E72 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5E74   Length              0005 (5)\n+5E76   Flags               01 (1) 'Modification'\n+5E77   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5E7B LOCAL HEADER #13      04034B50 (67324752)\n+5E7F Extract Zip Spec      14 (20) '2.0'\n+5E80 Extract OS            00 (0) 'MS-DOS'\n+5E81 General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+5E83 Compression Method    0000 (0) 'Stored'\n+5E85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5E89 CRC                   00000000 (0)\n+5E8D Compressed Size       00000000 (0)\n+5E91 Uncompressed Size     00000000 (0)\n+5E95 Filename Length       0043 (67)\n+5E97 Extra Length          0009 (9)\n+5E99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5E99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5EDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5EDE   Length              0005 (5)\n+5EE0   Flags               01 (1) 'Modification'\n+5EE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5EE5 DATA DESCRIPTOR       08074B50 (134695760)\n+5EE9 CRC                   00000000 (0)\n+5EED Compressed Size       00000000 (0)\n+5EF1 Uncompressed Size     00000000 (0)\n+\n+5EF5 LOCAL HEADER #14      04034B50 (67324752)\n+5EF9 Extract Zip Spec      14 (20) '2.0'\n+5EFA Extract OS            00 (0) 'MS-DOS'\n+5EFB General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+5EFD Compression Method    0000 (0) 'Stored'\n+5EFF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5F03 CRC                   00000000 (0)\n+5F07 Compressed Size       00000000 (0)\n+5F0B Uncompressed Size     00000000 (0)\n+5F0F Filename Length       003C (60)\n+5F11 Extra Length          0009 (9)\n+5F13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5F13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5F4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5F51   Length              0005 (5)\n+5F53   Flags               01 (1) 'Modification'\n+5F54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+5F58 PAYLOAD\n+\n+681D DATA DESCRIPTOR       08074B50 (134695760)\n+6821 CRC                   69F6084D (1777731661)\n+6825 Compressed Size       000008C5 (2245)\n+6829 Uncompressed Size     000008C5 (2245)\n+\n+682D LOCAL HEADER #15      04034B50 (67324752)\n+6831 Extract Zip Spec      14 (20) '2.0'\n+6832 Extract OS            00 (0) 'MS-DOS'\n+6833 General Purpose Flag  0000 (0)\n+6835 Compression Method    0000 (0) 'Stored'\n+6837 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+683B CRC                   00000000 (0)\n+683F Compressed Size       00000000 (0)\n+6843 Uncompressed Size     00000000 (0)\n+6847 Filename Length       0004 (4)\n+6849 Extra Length          0009 (9)\n+684B Filename              'XXXX'\n+#\n+# WARNING: Offset 0x684B: Filename 'XXXX'\n+#          Zero length filename\n+#\n+684F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6851   Length              0005 (5)\n+6853   Flags               01 (1) 'Modification'\n+6854   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6858 LOCAL HEADER #16      04034B50 (67324752)\n+685C Extract Zip Spec      14 (20) '2.0'\n+685D Extract OS            00 (0) 'MS-DOS'\n+685E General Purpose Flag  0000 (0)\n+6860 Compression Method    0000 (0) 'Stored'\n+6862 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6866 CRC                   00000000 (0)\n+686A Compressed Size       00000000 (0)\n+686E Uncompressed Size     00000000 (0)\n+6872 Filename Length       000B (11)\n+6874 Extra Length          0009 (9)\n+6876 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6876: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6881 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6883   Length              0005 (5)\n+6885   Flags               01 (1) 'Modification'\n+6886   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+688A LOCAL HEADER #17      04034B50 (67324752)\n+688E Extract Zip Spec      14 (20) '2.0'\n+688F Extract OS            00 (0) 'MS-DOS'\n+6890 General Purpose Flag  0000 (0)\n+6892 Compression Method    0000 (0) 'Stored'\n+6894 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6898 CRC                   00000000 (0)\n+689C Compressed Size       00000000 (0)\n+68A0 Uncompressed Size     00000000 (0)\n+68A4 Filename Length       0011 (17)\n+68A6 Extra Length          0009 (9)\n+68A8 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x68A8: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+68B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+68BB   Length              0005 (5)\n+68BD   Flags               01 (1) 'Modification'\n+68BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+68C2 LOCAL HEADER #18      04034B50 (67324752)\n+68C6 Extract Zip Spec      14 (20) '2.0'\n+68C7 Extract OS            00 (0) 'MS-DOS'\n+68C8 General Purpose Flag  0000 (0)\n+68CA Compression Method    0000 (0) 'Stored'\n+68CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+68D0 CRC                   00000000 (0)\n+68D4 Compressed Size       00000000 (0)\n+68D8 Uncompressed Size     00000000 (0)\n+68DC Filename Length       001A (26)\n+68DE Extra Length          0009 (9)\n+68E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x68E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+68FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+68FC   Length              0005 (5)\n+68FE   Flags               01 (1) 'Modification'\n+68FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6903 LOCAL HEADER #19      04034B50 (67324752)\n+6907 Extract Zip Spec      14 (20) '2.0'\n+6908 Extract OS            00 (0) 'MS-DOS'\n+6909 General Purpose Flag  0000 (0)\n+690B Compression Method    0000 (0) 'Stored'\n+690D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6911 CRC                   00000000 (0)\n+6915 Compressed Size       00000000 (0)\n+6919 Uncompressed Size     00000000 (0)\n+691D Filename Length       001F (31)\n+691F Extra Length          0009 (9)\n+6921 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6921: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6940 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6942   Length              0005 (5)\n+6944   Flags               01 (1) 'Modification'\n+6945   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+6949 LOCAL HEADER #20      04034B50 (67324752)\n+694D Extract Zip Spec      14 (20) '2.0'\n+694E Extract OS            00 (0) 'MS-DOS'\n+694F General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+6951 Compression Method    0000 (0) 'Stored'\n+6953 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+6957 CRC                   00000000 (0)\n+695B Compressed Size       00000000 (0)\n+695F Uncompressed Size     00000000 (0)\n+6963 Filename Length       0030 (48)\n+6965 Extra Length          0009 (9)\n+6967 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6967: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+6997 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+6999   Length              0005 (5)\n+699B   Flags               01 (1) 'Modification'\n+699C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+69A0 PAYLOAD\n+\n+A8FB DATA DESCRIPTOR       08074B50 (134695760)\n+A8FF CRC                   775C02B8 (2002518712)\n+A903 Compressed Size       00003F5B (16219)\n+A907 Uncompressed Size     00003F5B (16219)\n+\n+A90B LOCAL HEADER #21      04034B50 (67324752)\n+A90F Extract Zip Spec      14 (20) '2.0'\n+A910 Extract OS            00 (0) 'MS-DOS'\n+A911 General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+A913 Compression Method    0000 (0) 'Stored'\n+A915 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+A919 CRC                   00000000 (0)\n+A91D Compressed Size       00000000 (0)\n+A921 Uncompressed Size     00000000 (0)\n+A925 Filename Length       0037 (55)\n+A927 Extra Length          0009 (9)\n+A929 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA929: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+A960 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+A962   Length              0005 (5)\n+A964   Flags               01 (1) 'Modification'\n+A965   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+A969 PAYLOAD\n+\n+AF0E DATA DESCRIPTOR       08074B50 (134695760)\n+AF12 CRC                   C7AB4B17 (3349891863)\n+AF16 Compressed Size       000005A5 (1445)\n+AF1A Uncompressed Size     000005A5 (1445)\n+\n+AF1E LOCAL HEADER #22      04034B50 (67324752)\n+AF22 Extract Zip Spec      14 (20) '2.0'\n+AF23 Extract OS            00 (0) 'MS-DOS'\n+AF24 General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+AF26 Compression Method    0000 (0) 'Stored'\n+AF28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+AF2C CRC                   00000000 (0)\n+AF30 Compressed Size       00000000 (0)\n+AF34 Uncompressed Size     00000000 (0)\n+AF38 Filename Length       0038 (56)\n+AF3A Extra Length          0009 (9)\n+AF3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xAF3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+AF74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+AF76   Length              0005 (5)\n+AF78   Flags               01 (1) 'Modification'\n+AF79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+AF7D PAYLOAD\n+\n+D03F DATA DESCRIPTOR       08074B50 (134695760)\n+D043 CRC                   935B5779 (2472236921)\n+D047 Compressed Size       000020C2 (8386)\n+D04B Uncompressed Size     000020C2 (8386)\n+\n+D04F CENTRAL HEADER #1     02014B50 (33639248)\n+D053 Created Zip Spec      14 (20) '2.0'\n+D054 Created OS            00 (0) 'MS-DOS'\n+D055 Extract Zip Spec      14 (20) '2.0'\n+D056 Extract OS            00 (0) 'MS-DOS'\n+D057 General Purpose Flag  0000 (0)\n+D059 Compression Method    0000 (0) 'Stored'\n+D05B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D05F CRC                   00000000 (0)\n+D063 Compressed Size       00000000 (0)\n+D067 Uncompressed Size     00000000 (0)\n+D06B Filename Length       0009 (9)\n+D06D Extra Length          0009 (9)\n+D06F Comment Length        0000 (0)\n+D071 Disk Start            0000 (0)\n+D073 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D075 Ext File Attributes   00000000 (0)\n+D079 Local Header Offset   00000000 (0)\n+D07D Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0xD07D: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+D086 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D088   Length              0005 (5)\n+D08A   Flags               01 (1) 'Modification'\n+D08B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D08F CENTRAL HEADER #2     02014B50 (33639248)\n+D093 Created Zip Spec      14 (20) '2.0'\n+D094 Created OS            00 (0) 'MS-DOS'\n+D095 Extract Zip Spec      14 (20) '2.0'\n+D096 Extract OS            00 (0) 'MS-DOS'\n+D097 General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D099 Compression Method    0000 (0) 'Stored'\n+D09B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D09F CRC                   36ACB63B (917288507)\n+D0A3 Compressed Size       00002D46 (11590)\n+D0A7 Uncompressed Size     00002D46 (11590)\n+D0AB Filename Length       0015 (21)\n+D0AD Extra Length          0009 (9)\n+D0AF Comment Length        0000 (0)\n+D0B1 Disk Start            0000 (0)\n+D0B3 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D0B5 Ext File Attributes   00000000 (0)\n+D0B9 Local Header Offset   00000030 (48)\n+D0BD Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD0BD: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D0D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D0D4   Length              0005 (5)\n+D0D6   Flags               01 (1) 'Modification'\n+D0D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D0DB CENTRAL HEADER #3     02014B50 (33639248)\n+D0DF Created Zip Spec      14 (20) '2.0'\n+D0E0 Created OS            00 (0) 'MS-DOS'\n+D0E1 Extract Zip Spec      14 (20) '2.0'\n+D0E2 Extract OS            00 (0) 'MS-DOS'\n+D0E3 General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D0E5 Compression Method    0000 (0) 'Stored'\n+D0E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D0EB CRC                   86E2B4B4 (2263004340)\n+D0EF Compressed Size       00002C5E (11358)\n+D0F3 Uncompressed Size     00002C5E (11358)\n+D0F7 Filename Length       0010 (16)\n+D0F9 Extra Length          0009 (9)\n+D0FB Comment Length        0000 (0)\n+D0FD Disk Start            0000 (0)\n+D0FF Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D101 Ext File Attributes   00000000 (0)\n+D105 Local Header Offset   00002DC2 (11714)\n+D109 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD109: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D119 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D11B   Length              0005 (5)\n+D11D   Flags               01 (1) 'Modification'\n+D11E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D122 CENTRAL HEADER #4     02014B50 (33639248)\n+D126 Created Zip Spec      14 (20) '2.0'\n+D127 Created OS            00 (0) 'MS-DOS'\n+D128 Extract Zip Spec      14 (20) '2.0'\n+D129 Extract OS            00 (0) 'MS-DOS'\n+D12A General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D12C Compression Method    0000 (0) 'Stored'\n+D12E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D132 CRC                   EE027FB2 (3993141170)\n+D136 Compressed Size       00000019 (25)\n+D13A Uncompressed Size     00000019 (25)\n+D13E Filename Length       0014 (20)\n+D140 Extra Length          0009 (9)\n+D142 Comment Length        0000 (0)\n+D144 Disk Start            0000 (0)\n+D146 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D148 Ext File Attributes   00000000 (0)\n+D14C Local Header Offset   00005A67 (23143)\n+D150 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD150: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D164 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D166   Length              0005 (5)\n+D168   Flags               01 (1) 'Modification'\n+D169   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D16D CENTRAL HEADER #5     02014B50 (33639248)\n+D171 Created Zip Spec      14 (20) '2.0'\n+D172 Created OS            00 (0) 'MS-DOS'\n+D173 Extract Zip Spec      14 (20) '2.0'\n+D174 Extract OS            00 (0) 'MS-DOS'\n+D175 General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D177 Compression Method    0000 (0) 'Stored'\n+D179 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D17D CRC                   0B8AFFD7 (193658839)\n+D181 Compressed Size       000000B1 (177)\n+D185 Uncompressed Size     000000B1 (177)\n+D189 Filename Length       000F (15)\n+D18B Extra Length          0009 (9)\n+D18D Comment Length        0000 (0)\n+D18F Disk Start            0000 (0)\n+D191 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D193 Ext File Attributes   00000000 (0)\n+D197 Local Header Offset   00005ACB (23243)\n+D19B Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD19B: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D1AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D1AC   Length              0005 (5)\n+D1AE   Flags               01 (1) 'Modification'\n+D1AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D1B3 CENTRAL HEADER #6     02014B50 (33639248)\n+D1B7 Created Zip Spec      14 (20) '2.0'\n+D1B8 Created OS            00 (0) 'MS-DOS'\n+D1B9 Extract Zip Spec      14 (20) '2.0'\n+D1BA Extract OS            00 (0) 'MS-DOS'\n+D1BB General Purpose Flag  0000 (0)\n+D1BD Compression Method    0000 (0) 'Stored'\n+D1BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D1C3 CRC                   00000000 (0)\n+D1C7 Compressed Size       00000000 (0)\n+D1CB Uncompressed Size     00000000 (0)\n+D1CF Filename Length       000F (15)\n+D1D1 Extra Length          0009 (9)\n+D1D3 Comment Length        0000 (0)\n+D1D5 Disk Start            0000 (0)\n+D1D7 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D1D9 Ext File Attributes   00000000 (0)\n+D1DD Local Header Offset   00005BC2 (23490)\n+D1E1 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD1E1: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D1F0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D1F2   Length              0005 (5)\n+D1F4   Flags               01 (1) 'Modification'\n+D1F5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D1F9 CENTRAL HEADER #7     02014B50 (33639248)\n+D1FD Created Zip Spec      14 (20) '2.0'\n+D1FE Created OS            00 (0) 'MS-DOS'\n+D1FF Extract Zip Spec      14 (20) '2.0'\n+D200 Extract OS            00 (0) 'MS-DOS'\n+D201 General Purpose Flag  0000 (0)\n+D203 Compression Method    0000 (0) 'Stored'\n+D205 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D209 CRC                   00000000 (0)\n+D20D Compressed Size       00000000 (0)\n+D211 Uncompressed Size     00000000 (0)\n+D215 Filename Length       0018 (24)\n+D217 Extra Length          0009 (9)\n+D219 Comment Length        0000 (0)\n+D21B Disk Start            0000 (0)\n+D21D Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D21F Ext File Attributes   00000000 (0)\n+D223 Local Header Offset   00005BF8 (23544)\n+D227 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD227: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D23F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D241   Length              0005 (5)\n+D243   Flags               01 (1) 'Modification'\n+D244   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D248 CENTRAL HEADER #8     02014B50 (33639248)\n+D24C Created Zip Spec      14 (20) '2.0'\n+D24D Created OS            00 (0) 'MS-DOS'\n+D24E Extract Zip Spec      14 (20) '2.0'\n+D24F Extract OS            00 (0) 'MS-DOS'\n+D250 General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D252 Compression Method    0000 (0) 'Stored'\n+D254 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D258 CRC                   8176D79D (2172049309)\n+D25C Compressed Size       00000038 (56)\n+D260 Uncompressed Size     00000038 (56)\n+D264 Filename Length       0041 (65)\n+D266 Extra Length          0009 (9)\n+D268 Comment Length        0000 (0)\n+D26A Disk Start            0000 (0)\n+D26C Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D26E Ext File Attributes   00000000 (0)\n+D272 Local Header Offset   00005C37 (23607)\n+D276 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD276: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D2B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D2B9   Length              0005 (5)\n+D2BB   Flags               01 (1) 'Modification'\n+D2BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D2C0 CENTRAL HEADER #9     02014B50 (33639248)\n+D2C4 Created Zip Spec      14 (20) '2.0'\n+D2C5 Created OS            00 (0) 'MS-DOS'\n+D2C6 Extract Zip Spec      14 (20) '2.0'\n+D2C7 Extract OS            00 (0) 'MS-DOS'\n+D2C8 General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D2CA Compression Method    0000 (0) 'Stored'\n+D2CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D2D0 CRC                   8E269995 (2384894357)\n+D2D4 Compressed Size       0000003B (59)\n+D2D8 Uncompressed Size     0000003B (59)\n+D2DC Filename Length       0049 (73)\n+D2DE Extra Length          0009 (9)\n+D2E0 Comment Length        0000 (0)\n+D2E2 Disk Start            0000 (0)\n+D2E4 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D2E6 Ext File Attributes   00000000 (0)\n+D2EA Local Header Offset   00005CE7 (23783)\n+D2EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD2EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D337 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D339   Length              0005 (5)\n+D33B   Flags               01 (1) 'Modification'\n+D33C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D340 CENTRAL HEADER #10    02014B50 (33639248)\n+D344 Created Zip Spec      14 (20) '2.0'\n+D345 Created OS            00 (0) 'MS-DOS'\n+D346 Extract Zip Spec      14 (20) '2.0'\n+D347 Extract OS            00 (0) 'MS-DOS'\n+D348 General Purpose Flag  0000 (0)\n+D34A Compression Method    0000 (0) 'Stored'\n+D34C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D350 CRC                   00000000 (0)\n+D354 Compressed Size       00000000 (0)\n+D358 Uncompressed Size     00000000 (0)\n+D35C Filename Length       000F (15)\n+D35E Extra Length          0009 (9)\n+D360 Comment Length        0000 (0)\n+D362 Disk Start            0000 (0)\n+D364 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D366 Ext File Attributes   00000000 (0)\n+D36A Local Header Offset   00005DA2 (23970)\n+D36E Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD36E: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D37D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D37F   Length              0005 (5)\n+D381   Flags               01 (1) 'Modification'\n+D382   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D386 CENTRAL HEADER #11    02014B50 (33639248)\n+D38A Created Zip Spec      14 (20) '2.0'\n+D38B Created OS            00 (0) 'MS-DOS'\n+D38C Extract Zip Spec      14 (20) '2.0'\n+D38D Extract OS            00 (0) 'MS-DOS'\n+D38E General Purpose Flag  0000 (0)\n+D390 Compression Method    0000 (0) 'Stored'\n+D392 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D396 CRC                   00000000 (0)\n+D39A Compressed Size       00000000 (0)\n+D39E Uncompressed Size     00000000 (0)\n+D3A2 Filename Length       0020 (32)\n+D3A4 Extra Length          0009 (9)\n+D3A6 Comment Length        0000 (0)\n+D3A8 Disk Start            0000 (0)\n+D3AA Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D3AC Ext File Attributes   00000000 (0)\n+D3B0 Local Header Offset   00005DD8 (24024)\n+D3B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD3B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D3D4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D3D6   Length              0005 (5)\n+D3D8   Flags               01 (1) 'Modification'\n+D3D9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D3DD CENTRAL HEADER #12    02014B50 (33639248)\n+D3E1 Created Zip Spec      14 (20) '2.0'\n+D3E2 Created OS            00 (0) 'MS-DOS'\n+D3E3 Extract Zip Spec      14 (20) '2.0'\n+D3E4 Extract OS            00 (0) 'MS-DOS'\n+D3E5 General Purpose Flag  0000 (0)\n+D3E7 Compression Method    0000 (0) 'Stored'\n+D3E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D3ED CRC                   00000000 (0)\n+D3F1 Compressed Size       00000000 (0)\n+D3F5 Uncompressed Size     00000000 (0)\n+D3F9 Filename Length       0035 (53)\n+D3FB Extra Length          0009 (9)\n+D3FD Comment Length        0000 (0)\n+D3FF Disk Start            0000 (0)\n+D401 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D403 Ext File Attributes   00000000 (0)\n+D407 Local Header Offset   00005E1F (24095)\n+D40B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD40B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D440 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D442   Length              0005 (5)\n+D444   Flags               01 (1) 'Modification'\n+D445   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D449 CENTRAL HEADER #13    02014B50 (33639248)\n+D44D Created Zip Spec      14 (20) '2.0'\n+D44E Created OS            00 (0) 'MS-DOS'\n+D44F Extract Zip Spec      14 (20) '2.0'\n+D450 Extract OS            00 (0) 'MS-DOS'\n+D451 General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D453 Compression Method    0000 (0) 'Stored'\n+D455 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D459 CRC                   00000000 (0)\n+D45D Compressed Size       00000000 (0)\n+D461 Uncompressed Size     00000000 (0)\n+D465 Filename Length       0043 (67)\n+D467 Extra Length          0009 (9)\n+D469 Comment Length        0000 (0)\n+D46B Disk Start            0000 (0)\n+D46D Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D46F Ext File Attributes   00000000 (0)\n+D473 Local Header Offset   00005E7B (24187)\n+D477 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD477: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D4BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D4BC   Length              0005 (5)\n+D4BE   Flags               01 (1) 'Modification'\n+D4BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D4C3 CENTRAL HEADER #14    02014B50 (33639248)\n+D4C7 Created Zip Spec      14 (20) '2.0'\n+D4C8 Created OS            00 (0) 'MS-DOS'\n+D4C9 Extract Zip Spec      14 (20) '2.0'\n+D4CA Extract OS            00 (0) 'MS-DOS'\n+D4CB General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D4CD Compression Method    0000 (0) 'Stored'\n+D4CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D4D3 CRC                   69F6084D (1777731661)\n+D4D7 Compressed Size       000008C5 (2245)\n+D4DB Uncompressed Size     000008C5 (2245)\n+D4DF Filename Length       003C (60)\n+D4E1 Extra Length          0009 (9)\n+D4E3 Comment Length        0000 (0)\n+D4E5 Disk Start            0000 (0)\n+D4E7 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D4E9 Ext File Attributes   00000000 (0)\n+D4ED Local Header Offset   00005EF5 (24309)\n+D4F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD4F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D52D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D52F   Length              0005 (5)\n+D531   Flags               01 (1) 'Modification'\n+D532   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D536 CENTRAL HEADER #15    02014B50 (33639248)\n+D53A Created Zip Spec      14 (20) '2.0'\n+D53B Created OS            00 (0) 'MS-DOS'\n+D53C Extract Zip Spec      14 (20) '2.0'\n+D53D Extract OS            00 (0) 'MS-DOS'\n+D53E General Purpose Flag  0000 (0)\n+D540 Compression Method    0000 (0) 'Stored'\n+D542 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D546 CRC                   00000000 (0)\n+D54A Compressed Size       00000000 (0)\n+D54E Uncompressed Size     00000000 (0)\n+D552 Filename Length       0004 (4)\n+D554 Extra Length          0009 (9)\n+D556 Comment Length        0000 (0)\n+D558 Disk Start            0000 (0)\n+D55A Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D55C Ext File Attributes   00000000 (0)\n+D560 Local Header Offset   0000682D (26669)\n+D564 Filename              'XXXX'\n+#\n+# WARNING: Offset 0xD564: Filename 'XXXX'\n+#          Zero length filename\n+#\n+D568 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D56A   Length              0005 (5)\n+D56C   Flags               01 (1) 'Modification'\n+D56D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D571 CENTRAL HEADER #16    02014B50 (33639248)\n+D575 Created Zip Spec      14 (20) '2.0'\n+D576 Created OS            00 (0) 'MS-DOS'\n+D577 Extract Zip Spec      14 (20) '2.0'\n+D578 Extract OS            00 (0) 'MS-DOS'\n+D579 General Purpose Flag  0000 (0)\n+D57B Compression Method    0000 (0) 'Stored'\n+D57D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D581 CRC                   00000000 (0)\n+D585 Compressed Size       00000000 (0)\n+D589 Uncompressed Size     00000000 (0)\n+D58D Filename Length       000B (11)\n+D58F Extra Length          0009 (9)\n+D591 Comment Length        0000 (0)\n+D593 Disk Start            0000 (0)\n+D595 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D597 Ext File Attributes   00000000 (0)\n+D59B Local Header Offset   00006858 (26712)\n+D59F Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD59F: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D5AA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D5AC   Length              0005 (5)\n+D5AE   Flags               01 (1) 'Modification'\n+D5AF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D5B3 CENTRAL HEADER #17    02014B50 (33639248)\n+D5B7 Created Zip Spec      14 (20) '2.0'\n+D5B8 Created OS            00 (0) 'MS-DOS'\n+D5B9 Extract Zip Spec      14 (20) '2.0'\n+D5BA Extract OS            00 (0) 'MS-DOS'\n+D5BB General Purpose Flag  0000 (0)\n+D5BD Compression Method    0000 (0) 'Stored'\n+D5BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D5C3 CRC                   00000000 (0)\n+D5C7 Compressed Size       00000000 (0)\n+D5CB Uncompressed Size     00000000 (0)\n+D5CF Filename Length       0011 (17)\n+D5D1 Extra Length          0009 (9)\n+D5D3 Comment Length        0000 (0)\n+D5D5 Disk Start            0000 (0)\n+D5D7 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D5D9 Ext File Attributes   00000000 (0)\n+D5DD Local Header Offset   0000688A (26762)\n+D5E1 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD5E1: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D5F2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D5F4   Length              0005 (5)\n+D5F6   Flags               01 (1) 'Modification'\n+D5F7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D5FB CENTRAL HEADER #18    02014B50 (33639248)\n+D5FF Created Zip Spec      14 (20) '2.0'\n+D600 Created OS            00 (0) 'MS-DOS'\n+D601 Extract Zip Spec      14 (20) '2.0'\n+D602 Extract OS            00 (0) 'MS-DOS'\n+D603 General Purpose Flag  0000 (0)\n+D605 Compression Method    0000 (0) 'Stored'\n+D607 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D60B CRC                   00000000 (0)\n+D60F Compressed Size       00000000 (0)\n+D613 Uncompressed Size     00000000 (0)\n+D617 Filename Length       001A (26)\n+D619 Extra Length          0009 (9)\n+D61B Comment Length        0000 (0)\n+D61D Disk Start            0000 (0)\n+D61F Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D621 Ext File Attributes   00000000 (0)\n+D625 Local Header Offset   000068C2 (26818)\n+D629 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD629: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D643 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D645   Length              0005 (5)\n+D647   Flags               01 (1) 'Modification'\n+D648   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D64C CENTRAL HEADER #19    02014B50 (33639248)\n+D650 Created Zip Spec      14 (20) '2.0'\n+D651 Created OS            00 (0) 'MS-DOS'\n+D652 Extract Zip Spec      14 (20) '2.0'\n+D653 Extract OS            00 (0) 'MS-DOS'\n+D654 General Purpose Flag  0000 (0)\n+D656 Compression Method    0000 (0) 'Stored'\n+D658 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D65C CRC                   00000000 (0)\n+D660 Compressed Size       00000000 (0)\n+D664 Uncompressed Size     00000000 (0)\n+D668 Filename Length       001F (31)\n+D66A Extra Length          0009 (9)\n+D66C Comment Length        0000 (0)\n+D66E Disk Start            0000 (0)\n+D670 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D672 Ext File Attributes   00000000 (0)\n+D676 Local Header Offset   00006903 (26883)\n+D67A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD67A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D699 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D69B   Length              0005 (5)\n+D69D   Flags               01 (1) 'Modification'\n+D69E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D6A2 CENTRAL HEADER #20    02014B50 (33639248)\n+D6A6 Created Zip Spec      14 (20) '2.0'\n+D6A7 Created OS            00 (0) 'MS-DOS'\n+D6A8 Extract Zip Spec      14 (20) '2.0'\n+D6A9 Extract OS            00 (0) 'MS-DOS'\n+D6AA General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D6AC Compression Method    0000 (0) 'Stored'\n+D6AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D6B2 CRC                   775C02B8 (2002518712)\n+D6B6 Compressed Size       00003F5B (16219)\n+D6BA Uncompressed Size     00003F5B (16219)\n+D6BE Filename Length       0030 (48)\n+D6C0 Extra Length          0009 (9)\n+D6C2 Comment Length        0000 (0)\n+D6C4 Disk Start            0000 (0)\n+D6C6 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D6C8 Ext File Attributes   00000000 (0)\n+D6CC Local Header Offset   00006949 (26953)\n+D6D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD6D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D700 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D702   Length              0005 (5)\n+D704   Flags               01 (1) 'Modification'\n+D705   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D709 CENTRAL HEADER #21    02014B50 (33639248)\n+D70D Created Zip Spec      14 (20) '2.0'\n+D70E Created OS            00 (0) 'MS-DOS'\n+D70F Extract Zip Spec      14 (20) '2.0'\n+D710 Extract OS            00 (0) 'MS-DOS'\n+D711 General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D713 Compression Method    0000 (0) 'Stored'\n+D715 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D719 CRC                   C7AB4B17 (3349891863)\n+D71D Compressed Size       000005A5 (1445)\n+D721 Uncompressed Size     000005A5 (1445)\n+D725 Filename Length       0037 (55)\n+D727 Extra Length          0009 (9)\n+D729 Comment Length        0000 (0)\n+D72B Disk Start            0000 (0)\n+D72D Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D72F Ext File Attributes   00000000 (0)\n+D733 Local Header Offset   0000A90B (43275)\n+D737 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD737: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D76E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D770   Length              0005 (5)\n+D772   Flags               01 (1) 'Modification'\n+D773   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D777 CENTRAL HEADER #22    02014B50 (33639248)\n+D77B Created Zip Spec      14 (20) '2.0'\n+D77C Created OS            00 (0) 'MS-DOS'\n+D77D Extract Zip Spec      14 (20) '2.0'\n+D77E Extract OS            00 (0) 'MS-DOS'\n+D77F General Purpose Flag  0008 (8)\n+     [Bit  3]              1 'Streamed'\n+D781 Compression Method    0000 (0) 'Stored'\n+D783 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+D787 CRC                   935B5779 (2472236921)\n+D78B Compressed Size       000020C2 (8386)\n+D78F Uncompressed Size     000020C2 (8386)\n+D793 Filename Length       0038 (56)\n+D795 Extra Length          0009 (9)\n+D797 Comment Length        0000 (0)\n+D799 Disk Start            0000 (0)\n+D79B Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+D79D Ext File Attributes   00000000 (0)\n+D7A1 Local Header Offset   0000AF1E (44830)\n+D7A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD7A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+D7DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+D7DF   Length              0005 (5)\n+D7E1   Flags               01 (1) 'Modification'\n+D7E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+D7E6 END CENTRAL HEADER    06054B50 (101010256)\n+D7EA Number of this disk   0000 (0)\n+D7EC Central Dir Disk no   0000 (0)\n+D7EE Entries in this disk  0016 (22)\n+D7F0 Total Entries         0016 (22)\n+D7F2 Size of Central Dir   00000797 (1943)\n+D7F6 Offset to Central Dir 0000D04F (53327)\n+D7FA Comment Length        0000 (0)\n #\n # Warning Count: 44\n #\n # Done\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscovery", "source2": "META-INF/dubbo/internal/org.apache.dubbo.registry.client.ServiceDiscovery", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1 +1 @@\n-etcd3=org.apache.dubbo.registry.etcd.EtcdServiceDiscovery\n+etcd3=org.apache.dubbo.registry.etcd.EtcdServiceDiscovery\r\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-registry-etcd3/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-registry-etcd3/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,144 +1,141 @@\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: 7e20 4c69 6365 6e73 6564 2074 6f20 7468  ~ Licensed to th\n-00000040: 6520 4170 6163 6865 2053 6f66 7477 6172  e Apache Softwar\n-00000050: 6520 466f 756e 6461 7469 6f6e 2028 4153  e Foundation (AS\n-00000060: 4629 2075 6e64 6572 206f 6e65 206f 7220  F) under one or \n-00000070: 6d6f 7265 0d0a 2020 7e20 636f 6e74 7269  more..  ~ contri\n-00000080: 6275 746f 7220 6c69 6365 6e73 6520 6167  butor license ag\n-00000090: 7265 656d 656e 7473 2e20 2053 6565 2074  reements.  See t\n-000000a0: 6865 204e 4f54 4943 4520 6669 6c65 2064  he NOTICE file d\n-000000b0: 6973 7472 6962 7574 6564 2077 6974 680d  istributed with.\n-000000c0: 0a20 207e 2074 6869 7320 776f 726b 2066  .  ~ this work f\n-000000d0: 6f72 2061 6464 6974 696f 6e61 6c20 696e  or additional in\n-000000e0: 666f 726d 6174 696f 6e20 7265 6761 7264  formation regard\n-000000f0: 696e 6720 636f 7079 7269 6768 7420 6f77  ing copyright ow\n-00000100: 6e65 7273 6869 702e 0d0a 2020 7e20 5468  nership...  ~ Th\n-00000110: 6520 4153 4620 6c69 6365 6e73 6573 2074  e ASF licenses t\n-00000120: 6869 7320 6669 6c65 2074 6f20 596f 7520  his file to You \n-00000130: 756e 6465 7220 7468 6520 4170 6163 6865  under the Apache\n-00000140: 204c 6963 656e 7365 2c20 5665 7273 696f   License, Versio\n-00000150: 6e20 322e 300d 0a20 207e 2028 7468 6520  n 2.0..  ~ (the \n-00000160: 224c 6963 656e 7365 2229 3b20 796f 7520  \"License\"); you \n-00000170: 6d61 7920 6e6f 7420 7573 6520 7468 6973  may not use this\n-00000180: 2066 696c 6520 6578 6365 7074 2069 6e20   file except in \n-00000190: 636f 6d70 6c69 616e 6365 2077 6974 680d  compliance with.\n-000001a0: 0a20 207e 2074 6865 204c 6963 656e 7365  .  ~ the License\n-000001b0: 2e20 2059 6f75 206d 6179 206f 6274 6169  .  You may obtai\n-000001c0: 6e20 6120 636f 7079 206f 6620 7468 6520  n a copy of the \n-000001d0: 4c69 6365 6e73 6520 6174 0d0a 2020 7e0d  License at..  ~.\n-000001e0: 0a20 207e 2020 2020 2068 7474 703a 2f2f  .  ~     http://\n-000001f0: 7777 772e 6170 6163 6865 2e6f 7267 2f6c  www.apache.org/l\n-00000200: 6963 656e 7365 732f 4c49 4345 4e53 452d  icenses/LICENSE-\n-00000210: 322e 300d 0a20 207e 0d0a 2020 7e20 556e  2.0..  ~..  ~ Un\n-00000220: 6c65 7373 2072 6571 7569 7265 6420 6279  less required by\n-00000230: 2061 7070 6c69 6361 626c 6520 6c61 7720   applicable law \n-00000240: 6f72 2061 6772 6565 6420 746f 2069 6e20  or agreed to in \n-00000250: 7772 6974 696e 672c 2073 6f66 7477 6172  writing, softwar\n-00000260: 650d 0a20 207e 2064 6973 7472 6962 7574  e..  ~ distribut\n-00000270: 6564 2075 6e64 6572 2074 6865 204c 6963  ed under the Lic\n-00000280: 656e 7365 2069 7320 6469 7374 7269 6275  ense is distribu\n-00000290: 7465 6420 6f6e 2061 6e20 2241 5320 4953  ted on an \"AS IS\n-000002a0: 2220 4241 5349 532c 0d0a 2020 7e20 5749  \" BASIS,..  ~ WI\n-000002b0: 5448 4f55 5420 5741 5252 414e 5449 4553  THOUT WARRANTIES\n-000002c0: 204f 5220 434f 4e44 4954 494f 4e53 204f   OR CONDITIONS O\n-000002d0: 4620 414e 5920 4b49 4e44 2c20 6569 7468  F ANY KIND, eith\n-000002e0: 6572 2065 7870 7265 7373 206f 7220 696d  er express or im\n-000002f0: 706c 6965 642e 0d0a 2020 7e20 5365 6520  plied...  ~ See \n-00000300: 7468 6520 4c69 6365 6e73 6520 666f 7220  the License for \n-00000310: 7468 6520 7370 6563 6966 6963 206c 616e  the specific lan\n-00000320: 6775 6167 6520 676f 7665 726e 696e 6720  guage governing \n-00000330: 7065 726d 6973 7369 6f6e 7320 616e 640d  permissions and.\n-00000340: 0a20 207e 206c 696d 6974 6174 696f 6e73  .  ~ limitations\n-00000350: 2075 6e64 6572 2074 6865 204c 6963 656e   under the Licen\n-00000360: 7365 2e0d 0a20 202d 2d3e 0d0a 3c70 726f  se...  -->..<pro\n-00000370: 6a65 6374 2078 7369 3a73 6368 656d 614c  ject xsi:schemaL\n-00000380: 6f63 6174 696f 6e3d 2268 7474 703a 2f2f  ocation=\"http://\n-00000390: 6d61 7665 6e2e 6170 6163 6865 2e6f 7267  maven.apache.org\n-000003a0: 2f50 4f4d 2f34 2e30 2e30 2068 7474 7073  /POM/4.0.0 https\n-000003b0: 3a2f 2f6d 6176 656e 2e61 7061 6368 652e  ://maven.apache.\n-000003c0: 6f72 672f 7873 642f 6d61 7665 6e2d 342e  org/xsd/maven-4.\n-000003d0: 302e 302e 7873 6422 2078 6d6c 6e73 3d22  0.0.xsd\" xmlns=\"\n-000003e0: 6874 7470 3a2f 2f6d 6176 656e 2e61 7061  http://maven.apa\n-000003f0: 6368 652e 6f72 672f 504f 4d2f 342e 302e  che.org/POM/4.0.\n-00000400: 3022 0d0a 2020 2020 786d 6c6e 733a 7873  0\"..    xmlns:xs\n-00000410: 693d 2268 7474 703a 2f2f 7777 772e 7733  i=\"http://www.w3\n-00000420: 2e6f 7267 2f32 3030 312f 584d 4c53 6368  .org/2001/XMLSch\n-00000430: 656d 612d 696e 7374 616e 6365 223e 0d0a  ema-instance\">..\n-00000440: 2020 3c6d 6f64 656c 5665 7273 696f 6e3e    <modelVersion>\n-00000450: 342e 302e 303c 2f6d 6f64 656c 5665 7273  4.0.0</modelVers\n-00000460: 696f 6e3e 0d0a 2020 3c70 6172 656e 743e  ion>..  <parent>\n-00000470: 0d0a 2020 2020 3c67 726f 7570 4964 3e6f  ..    <groupId>o\n-00000480: 7267 2e61 7061 6368 652e 6475 6262 6f3c  rg.apache.dubbo<\n-00000490: 2f67 726f 7570 4964 3e0d 0a20 2020 203c  /groupId>..    <\n-000004a0: 6172 7469 6661 6374 4964 3e64 7562 626f  artifactId>dubbo\n-000004b0: 2d72 6567 6973 7472 793c 2f61 7274 6966  -registry</artif\n-000004c0: 6163 7449 643e 0d0a 2020 2020 3c76 6572  actId>..    <ver\n-000004d0: 7369 6f6e 3e32 2e37 2e31 303c 2f76 6572  sion>2.7.10</ver\n-000004e0: 7369 6f6e 3e0d 0a20 203c 2f70 6172 656e  sion>..  </paren\n-000004f0: 743e 0d0a 2020 3c67 726f 7570 4964 3e6f  t>..  <groupId>o\n-00000500: 7267 2e61 7061 6368 652e 6475 6262 6f3c  rg.apache.dubbo<\n-00000510: 2f67 726f 7570 4964 3e0d 0a20 203c 6172  /groupId>..  <ar\n-00000520: 7469 6661 6374 4964 3e64 7562 626f 2d72  tifactId>dubbo-r\n-00000530: 6567 6973 7472 792d 6574 6364 333c 2f61  egistry-etcd3</a\n-00000540: 7274 6966 6163 7449 643e 0d0a 2020 3c76  rtifactId>..  <v\n-00000550: 6572 7369 6f6e 3e32 2e37 2e31 303c 2f76  ersion>2.7.10</v\n-00000560: 6572 7369 6f6e 3e0d 0a20 203c 6e61 6d65  ersion>..  <name\n-00000570: 3e24 7b70 726f 6a65 6374 2e61 7274 6966  >${project.artif\n-00000580: 6163 7449 647d 3c2f 6e61 6d65 3e0d 0a20  actId}</name>.. \n-00000590: 203c 6465 7363 7269 7074 696f 6e3e 5468   <description>Th\n-000005a0: 6520 6574 6364 3320 7265 6769 7374 7279  e etcd3 registry\n-000005b0: 206d 6f64 756c 6520 6f66 2044 7562 626f   module of Dubbo\n-000005c0: 2070 726f 6a65 6374 3c2f 6465 7363 7269   project</descri\n-000005d0: 7074 696f 6e3e 0d0a 2020 3c6c 6963 656e  ption>..  <licen\n-000005e0: 7365 733e 0d0a 2020 2020 3c6c 6963 656e  ses>..    <licen\n-000005f0: 7365 3e0d 0a20 2020 2020 203c 6e61 6d65  se>..      <name\n-00000600: 3e41 7061 6368 6520 4c69 6365 6e73 652c  >Apache License,\n-00000610: 2056 6572 7369 6f6e 2032 2e30 3c2f 6e61   Version 2.0</na\n-00000620: 6d65 3e0d 0a20 2020 2020 203c 7572 6c3e  me>..      <url>\n-00000630: 6874 7470 3a2f 2f77 7777 2e61 7061 6368  http://www.apach\n-00000640: 652e 6f72 672f 6c69 6365 6e73 6573 2f4c  e.org/licenses/L\n-00000650: 4943 454e 5345 2d32 2e30 3c2f 7572 6c3e  ICENSE-2.0</url>\n-00000660: 0d0a 2020 2020 2020 3c64 6973 7472 6962  ..      <distrib\n-00000670: 7574 696f 6e3e 7265 706f 3c2f 6469 7374  ution>repo</dist\n-00000680: 7269 6275 7469 6f6e 3e0d 0a20 2020 203c  ribution>..    <\n-00000690: 2f6c 6963 656e 7365 3e0d 0a20 203c 2f6c  /license>..  </l\n-000006a0: 6963 656e 7365 733e 0d0a 2020 3c64 6570  icenses>..  <dep\n-000006b0: 656e 6465 6e63 6965 733e 0d0a 2020 2020  endencies>..    \n-000006c0: 3c64 6570 656e 6465 6e63 793e 0d0a 2020  <dependency>..  \n-000006d0: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n-000006e0: 2e61 7061 6368 652e 6475 6262 6f3c 2f67  .apache.dubbo</g\n-000006f0: 726f 7570 4964 3e0d 0a20 2020 2020 203c  roupId>..      <\n-00000700: 6172 7469 6661 6374 4964 3e64 7562 626f  artifactId>dubbo\n-00000710: 2d72 6567 6973 7472 792d 6170 693c 2f61  -registry-api</a\n-00000720: 7274 6966 6163 7449 643e 0d0a 2020 2020  rtifactId>..    \n-00000730: 2020 3c76 6572 7369 6f6e 3e24 7b70 726f    <version>${pro\n-00000740: 6a65 6374 2e70 6172 656e 742e 7665 7273  ject.parent.vers\n-00000750: 696f 6e7d 3c2f 7665 7273 696f 6e3e 0d0a  ion}</version>..\n-00000760: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n-00000770: 3e0d 0a20 2020 203c 6465 7065 6e64 656e  >..    <dependen\n-00000780: 6379 3e0d 0a20 2020 2020 203c 6772 6f75  cy>..      <grou\n-00000790: 7049 643e 6f72 672e 6170 6163 6865 2e64  pId>org.apache.d\n-000007a0: 7562 626f 3c2f 6772 6f75 7049 643e 0d0a  ubbo</groupId>..\n-000007b0: 2020 2020 2020 3c61 7274 6966 6163 7449        <artifactI\n-000007c0: 643e 6475 6262 6f2d 636f 6d6d 6f6e 3c2f  d>dubbo-common</\n-000007d0: 6172 7469 6661 6374 4964 3e0d 0a20 2020  artifactId>..   \n-000007e0: 2020 203c 7665 7273 696f 6e3e 247b 7072     <version>${pr\n-000007f0: 6f6a 6563 742e 7061 7265 6e74 2e76 6572  oject.parent.ver\n-00000800: 7369 6f6e 7d3c 2f76 6572 7369 6f6e 3e0d  sion}</version>.\n-00000810: 0a20 2020 203c 2f64 6570 656e 6465 6e63  .    </dependenc\n-00000820: 793e 0d0a 2020 2020 3c64 6570 656e 6465  y>..    <depende\n-00000830: 6e63 793e 0d0a 2020 2020 2020 3c67 726f  ncy>..      <gro\n-00000840: 7570 4964 3e6f 7267 2e61 7061 6368 652e  upId>org.apache.\n-00000850: 6475 6262 6f3c 2f67 726f 7570 4964 3e0d  dubbo</groupId>.\n-00000860: 0a20 2020 2020 203c 6172 7469 6661 6374  .      <artifact\n-00000870: 4964 3e64 7562 626f 2d72 656d 6f74 696e  Id>dubbo-remotin\n-00000880: 672d 6574 6364 333c 2f61 7274 6966 6163  g-etcd3</artifac\n-00000890: 7449 643e 0d0a 2020 2020 2020 3c76 6572  tId>..      <ver\n-000008a0: 7369 6f6e 3e24 7b70 726f 6a65 6374 2e70  sion>${project.p\n-000008b0: 6172 656e 742e 7665 7273 696f 6e7d 3c2f  arent.version}</\n-000008c0: 7665 7273 696f 6e3e 0d0a 2020 2020 3c2f  version>..    </\n-000008d0: 6465 7065 6e64 656e 6379 3e0d 0a20 203c  dependency>..  <\n-000008e0: 2f64 6570 656e 6465 6e63 6965 733e 0d0a  /dependencies>..\n-000008f0: 3c2f 7072 6f6a 6563 743e 0d0a            </project>..\n+00000020: 462d 3822 3f3e 0a3c 212d 2d0a 2020 7e20  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 0a20 207e 2063 6f6e 7472 6962 7574  re.  ~ contribut\n+00000080: 6f72 206c 6963 656e 7365 2061 6772 6565  or license agree\n+00000090: 6d65 6e74 732e 2020 5365 6520 7468 6520  ments.  See the \n+000000a0: 4e4f 5449 4345 2066 696c 6520 6469 7374  NOTICE file dist\n+000000b0: 7269 6275 7465 6420 7769 7468 0a20 207e  ributed with.  ~\n+000000c0: 2074 6869 7320 776f 726b 2066 6f72 2061   this work for a\n+000000d0: 6464 6974 696f 6e61 6c20 696e 666f 726d  dditional inform\n+000000e0: 6174 696f 6e20 7265 6761 7264 696e 6720  ation regarding \n+000000f0: 636f 7079 7269 6768 7420 6f77 6e65 7273  copyright owners\n+00000100: 6869 702e 0a20 207e 2054 6865 2041 5346  hip..  ~ The ASF\n+00000110: 206c 6963 656e 7365 7320 7468 6973 2066   licenses this f\n+00000120: 696c 6520 746f 2059 6f75 2075 6e64 6572  ile to You under\n+00000130: 2074 6865 2041 7061 6368 6520 4c69 6365   the Apache Lice\n+00000140: 6e73 652c 2056 6572 7369 6f6e 2032 2e30  nse, Version 2.0\n+00000150: 0a20 207e 2028 7468 6520 224c 6963 656e  .  ~ (the \"Licen\n+00000160: 7365 2229 3b20 796f 7520 6d61 7920 6e6f  se\"); you may no\n+00000170: 7420 7573 6520 7468 6973 2066 696c 6520  t use this file \n+00000180: 6578 6365 7074 2069 6e20 636f 6d70 6c69  except in compli\n+00000190: 616e 6365 2077 6974 680a 2020 7e20 7468  ance with.  ~ th\n+000001a0: 6520 4c69 6365 6e73 652e 2020 596f 7520  e License.  You \n+000001b0: 6d61 7920 6f62 7461 696e 2061 2063 6f70  may obtain a cop\n+000001c0: 7920 6f66 2074 6865 204c 6963 656e 7365  y of the License\n+000001d0: 2061 740a 2020 7e0a 2020 7e20 2020 2020   at.  ~.  ~     \n+000001e0: 6874 7470 3a2f 2f77 7777 2e61 7061 6368  http://www.apach\n+000001f0: 652e 6f72 672f 6c69 6365 6e73 6573 2f4c  e.org/licenses/L\n+00000200: 4943 454e 5345 2d32 2e30 0a20 207e 0a20  ICENSE-2.0.  ~. \n+00000210: 207e 2055 6e6c 6573 7320 7265 7175 6972   ~ Unless requir\n+00000220: 6564 2062 7920 6170 706c 6963 6162 6c65  ed by applicable\n+00000230: 206c 6177 206f 7220 6167 7265 6564 2074   law or agreed t\n+00000240: 6f20 696e 2077 7269 7469 6e67 2c20 736f  o in writing, so\n+00000250: 6674 7761 7265 0a20 207e 2064 6973 7472  ftware.  ~ distr\n+00000260: 6962 7574 6564 2075 6e64 6572 2074 6865  ibuted under the\n+00000270: 204c 6963 656e 7365 2069 7320 6469 7374   License is dist\n+00000280: 7269 6275 7465 6420 6f6e 2061 6e20 2241  ributed on an \"A\n+00000290: 5320 4953 2220 4241 5349 532c 0a20 207e  S IS\" BASIS,.  ~\n+000002a0: 2057 4954 484f 5554 2057 4152 5241 4e54   WITHOUT WARRANT\n+000002b0: 4945 5320 4f52 2043 4f4e 4449 5449 4f4e  IES OR CONDITION\n+000002c0: 5320 4f46 2041 4e59 204b 494e 442c 2065  S OF ANY KIND, e\n+000002d0: 6974 6865 7220 6578 7072 6573 7320 6f72  ither express or\n+000002e0: 2069 6d70 6c69 6564 2e0a 2020 7e20 5365   implied..  ~ Se\n+000002f0: 6520 7468 6520 4c69 6365 6e73 6520 666f  e the License fo\n+00000300: 7220 7468 6520 7370 6563 6966 6963 206c  r the specific l\n+00000310: 616e 6775 6167 6520 676f 7665 726e 696e  anguage governin\n+00000320: 6720 7065 726d 6973 7369 6f6e 7320 616e  g permissions an\n+00000330: 640a 2020 7e20 6c69 6d69 7461 7469 6f6e  d.  ~ limitation\n+00000340: 7320 756e 6465 7220 7468 6520 4c69 6365  s under the Lice\n+00000350: 6e73 652e 0a20 202d 2d3e 0a3c 7072 6f6a  nse..  -->.<proj\n+00000360: 6563 7420 7873 693a 7363 6865 6d61 4c6f  ect xsi:schemaLo\n+00000370: 6361 7469 6f6e 3d22 6874 7470 3a2f 2f6d  cation=\"http://m\n+00000380: 6176 656e 2e61 7061 6368 652e 6f72 672f  aven.apache.org/\n+00000390: 504f 4d2f 342e 302e 3020 6874 7470 733a  POM/4.0.0 https:\n+000003a0: 2f2f 6d61 7665 6e2e 6170 6163 6865 2e6f  //maven.apache.o\n+000003b0: 7267 2f78 7364 2f6d 6176 656e 2d34 2e30  rg/xsd/maven-4.0\n+000003c0: 2e30 2e78 7364 2220 786d 6c6e 733d 2268  .0.xsd\" xmlns=\"h\n+000003d0: 7474 703a 2f2f 6d61 7665 6e2e 6170 6163  ttp://maven.apac\n+000003e0: 6865 2e6f 7267 2f50 4f4d 2f34 2e30 2e30  he.org/POM/4.0.0\n+000003f0: 220a 2020 2020 786d 6c6e 733a 7873 693d  \".    xmlns:xsi=\n+00000400: 2268 7474 703a 2f2f 7777 772e 7733 2e6f  \"http://www.w3.o\n+00000410: 7267 2f32 3030 312f 584d 4c53 6368 656d  rg/2001/XMLSchem\n+00000420: 612d 696e 7374 616e 6365 223e 0a20 203c  a-instance\">.  <\n+00000430: 6d6f 6465 6c56 6572 7369 6f6e 3e34 2e30  modelVersion>4.0\n+00000440: 2e30 3c2f 6d6f 6465 6c56 6572 7369 6f6e  .0</modelVersion\n+00000450: 3e0a 2020 3c70 6172 656e 743e 0a20 2020  >.  <parent>.   \n+00000460: 203c 6772 6f75 7049 643e 6f72 672e 6170   <groupId>org.ap\n+00000470: 6163 6865 2e64 7562 626f 3c2f 6772 6f75  ache.dubbo</grou\n+00000480: 7049 643e 0a20 2020 203c 6172 7469 6661  pId>.    <artifa\n+00000490: 6374 4964 3e64 7562 626f 2d72 6567 6973  ctId>dubbo-regis\n+000004a0: 7472 793c 2f61 7274 6966 6163 7449 643e  try</artifactId>\n+000004b0: 0a20 2020 203c 7665 7273 696f 6e3e 322e  .    <version>2.\n+000004c0: 372e 3130 3c2f 7665 7273 696f 6e3e 0a20  7.10</version>. \n+000004d0: 203c 2f70 6172 656e 743e 0a20 203c 6772   </parent>.  <gr\n+000004e0: 6f75 7049 643e 6f72 672e 6170 6163 6865  oupId>org.apache\n+000004f0: 2e64 7562 626f 3c2f 6772 6f75 7049 643e  .dubbo</groupId>\n+00000500: 0a20 203c 6172 7469 6661 6374 4964 3e64  .  <artifactId>d\n+00000510: 7562 626f 2d72 6567 6973 7472 792d 6574  ubbo-registry-et\n+00000520: 6364 333c 2f61 7274 6966 6163 7449 643e  cd3</artifactId>\n+00000530: 0a20 203c 7665 7273 696f 6e3e 322e 372e  .  <version>2.7.\n+00000540: 3130 3c2f 7665 7273 696f 6e3e 0a20 203c  10</version>.  <\n+00000550: 6e61 6d65 3e24 7b70 726f 6a65 6374 2e61  name>${project.a\n+00000560: 7274 6966 6163 7449 647d 3c2f 6e61 6d65  rtifactId}</name\n+00000570: 3e0a 2020 3c64 6573 6372 6970 7469 6f6e  >.  <description\n+00000580: 3e54 6865 2065 7463 6433 2072 6567 6973  >The etcd3 regis\n+00000590: 7472 7920 6d6f 6475 6c65 206f 6620 4475  try module of Du\n+000005a0: 6262 6f20 7072 6f6a 6563 743c 2f64 6573  bbo project</des\n+000005b0: 6372 6970 7469 6f6e 3e0a 2020 3c6c 6963  cription>.  <lic\n+000005c0: 656e 7365 733e 0a20 2020 203c 6c69 6365  enses>.    <lice\n+000005d0: 6e73 653e 0a20 2020 2020 203c 6e61 6d65  nse>.      <name\n+000005e0: 3e41 7061 6368 6520 4c69 6365 6e73 652c  >Apache License,\n+000005f0: 2056 6572 7369 6f6e 2032 2e30 3c2f 6e61   Version 2.0</na\n+00000600: 6d65 3e0a 2020 2020 2020 3c75 726c 3e68  me>.      <url>h\n+00000610: 7474 703a 2f2f 7777 772e 6170 6163 6865  ttp://www.apache\n+00000620: 2e6f 7267 2f6c 6963 656e 7365 732f 4c49  .org/licenses/LI\n+00000630: 4345 4e53 452d 322e 303c 2f75 726c 3e0a  CENSE-2.0</url>.\n+00000640: 2020 2020 2020 3c64 6973 7472 6962 7574        <distribut\n+00000650: 696f 6e3e 7265 706f 3c2f 6469 7374 7269  ion>repo</distri\n+00000660: 6275 7469 6f6e 3e0a 2020 2020 3c2f 6c69  bution>.    </li\n+00000670: 6365 6e73 653e 0a20 203c 2f6c 6963 656e  cense>.  </licen\n+00000680: 7365 733e 0a20 203c 6465 7065 6e64 656e  ses>.  <dependen\n+00000690: 6369 6573 3e0a 2020 2020 3c64 6570 656e  cies>.    <depen\n+000006a0: 6465 6e63 793e 0a20 2020 2020 203c 6772  dency>.      <gr\n+000006b0: 6f75 7049 643e 6f72 672e 6170 6163 6865  oupId>org.apache\n+000006c0: 2e64 7562 626f 3c2f 6772 6f75 7049 643e  .dubbo</groupId>\n+000006d0: 0a20 2020 2020 203c 6172 7469 6661 6374  .      <artifact\n+000006e0: 4964 3e64 7562 626f 2d72 6567 6973 7472  Id>dubbo-registr\n+000006f0: 792d 6170 693c 2f61 7274 6966 6163 7449  y-api</artifactI\n+00000700: 643e 0a20 2020 2020 203c 7665 7273 696f  d>.      <versio\n+00000710: 6e3e 247b 7072 6f6a 6563 742e 7061 7265  n>${project.pare\n+00000720: 6e74 2e76 6572 7369 6f6e 7d3c 2f76 6572  nt.version}</ver\n+00000730: 7369 6f6e 3e0a 2020 2020 3c2f 6465 7065  sion>.    </depe\n+00000740: 6e64 656e 6379 3e0a 2020 2020 3c64 6570  ndency>.    <dep\n+00000750: 656e 6465 6e63 793e 0a20 2020 2020 203c  endency>.      <\n+00000760: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n+00000770: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n+00000780: 643e 0a20 2020 2020 203c 6172 7469 6661  d>.      <artifa\n+00000790: 6374 4964 3e64 7562 626f 2d63 6f6d 6d6f  ctId>dubbo-commo\n+000007a0: 6e3c 2f61 7274 6966 6163 7449 643e 0a20  n</artifactId>. \n+000007b0: 2020 2020 203c 7665 7273 696f 6e3e 247b       <version>${\n+000007c0: 7072 6f6a 6563 742e 7061 7265 6e74 2e76  project.parent.v\n+000007d0: 6572 7369 6f6e 7d3c 2f76 6572 7369 6f6e  ersion}</version\n+000007e0: 3e0a 2020 2020 3c2f 6465 7065 6e64 656e  >.    </dependen\n+000007f0: 6379 3e0a 2020 2020 3c64 6570 656e 6465  cy>.    <depende\n+00000800: 6e63 793e 0a20 2020 2020 203c 6772 6f75  ncy>.      <grou\n+00000810: 7049 643e 6f72 672e 6170 6163 6865 2e64  pId>org.apache.d\n+00000820: 7562 626f 3c2f 6772 6f75 7049 643e 0a20  ubbo</groupId>. \n+00000830: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n+00000840: 3e64 7562 626f 2d72 656d 6f74 696e 672d  >dubbo-remoting-\n+00000850: 6574 6364 333c 2f61 7274 6966 6163 7449  etcd3</artifactI\n+00000860: 643e 0a20 2020 2020 203c 7665 7273 696f  d>.      <versio\n+00000870: 6e3e 247b 7072 6f6a 6563 742e 7061 7265  n>${project.pare\n+00000880: 6e74 2e76 6572 7369 6f6e 7d3c 2f76 6572  nt.version}</ver\n+00000890: 7369 6f6e 3e0a 2020 2020 3c2f 6465 7065  sion>.    </depe\n+000008a0: 6e64 656e 6379 3e0a 2020 3c2f 6465 7065  ndency>.  </depe\n+000008b0: 6e64 656e 6369 6573 3e0a 3c2f 7072 6f6a  ndencies>.</proj\n+000008c0: 6563 743e 0a                             ect>.\n"}, {"source1": "org/apache/dubbo/registry/etcd/EtcdRegistry.java", "source2": "org/apache/dubbo/registry/etcd/EtcdRegistry.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,355 +1,355 @@\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.etcd;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.ConcurrentHashSet;\n-import org.apache.dubbo.common.utils.UrlUtils;\n-import org.apache.dubbo.registry.NotifyListener;\n-import org.apache.dubbo.registry.support.FailbackRegistry;\n-import org.apache.dubbo.remoting.etcd.ChildListener;\n-import org.apache.dubbo.remoting.etcd.Constants;\n-import org.apache.dubbo.remoting.etcd.EtcdClient;\n-import org.apache.dubbo.remoting.etcd.EtcdTransporter;\n-import org.apache.dubbo.remoting.etcd.StateListener;\n-import org.apache.dubbo.remoting.etcd.option.OptionUtil;\n-import org.apache.dubbo.rpc.RpcException;\n-\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.List;\n-import java.util.Optional;\n-import java.util.Set;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\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_SEPARATOR;\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.DYNAMIC_KEY;\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.remoting.Constants.CHECK_KEY;\n-\n-\n-/**\n- * Support for ectd3 registry.\n- */\n-public class EtcdRegistry extends FailbackRegistry {\n-\n-    private final static int DEFAULT_ETCD_PORT = 2379;\n-\n-    private final static String DEFAULT_ROOT = \"dubbo\";\n-\n-    private final String root;\n-\n-    private final Set<String> anyServices = new ConcurrentHashSet<>();\n-\n-    private final ConcurrentMap<URL, ConcurrentMap<NotifyListener, ChildListener>> etcdListeners = new ConcurrentHashMap<>();\n-    private final EtcdClient etcdClient;\n-\n-    public EtcdRegistry(URL url, EtcdTransporter etcdTransporter) {\n-        super(url);\n-        if (url.isAnyHost()) {\n-            throw new IllegalStateException(\"registry address is invalid, actual: '\" + url.getHost() + \"'\");\n-        }\n-        String group = url.getParameter(GROUP_KEY, DEFAULT_ROOT);\n-        if (!group.startsWith(PATH_SEPARATOR)) {\n-            group = PATH_SEPARATOR + group;\n-        }\n-        this.root = group;\n-        etcdClient = etcdTransporter.connect(url);\n-\n-        etcdClient.addStateListener(state -> {\n-            if (state == StateListener.CONNECTED) {\n-                try {\n-                    recover();\n-                } catch (Exception e) {\n-                    logger.error(e.getMessage(), e);\n-                }\n-            }\n-        });\n-    }\n-\n-    protected static String appendDefaultPort(String address) {\n-        if (address != null && address.length() > 0) {\n-            int i = address.indexOf(':');\n-            if (i < 0) {\n-                return address + \":\" + DEFAULT_ETCD_PORT;\n-            } else if (Integer.parseInt(address.substring(i + 1)) == 0) {\n-                return address.substring(0, i + 1) + DEFAULT_ETCD_PORT;\n-            }\n-        }\n-        return address;\n-    }\n-\n-    @Override\n-    public void doRegister(URL url) {\n-        try {\n-            String path = toUrlPath(url);\n-            if (url.getParameter(DYNAMIC_KEY, true)) {\n-                etcdClient.createEphemeral(path);\n-                return;\n-            }\n-            etcdClient.create(path);\n-        } catch (Throwable e) {\n-            throw new RpcException(\"Failed to register \" + url + \" to etcd \" + getUrl()\n-                    + \", cause: \" + (OptionUtil.isProtocolError(e)\n-                    ? \"etcd3 registry may not be supported yet or etcd3 registry is not available.\"\n-                    : e.getMessage()), e);\n-        }\n-    }\n-\n-    @Override\n-    public void doUnregister(URL url) {\n-        try {\n-            String path = toUrlPath(url);\n-            etcdClient.delete(path);\n-        } catch (Throwable e) {\n-            throw new RpcException(\"Failed to unregister \" + url + \" to etcd \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    @Override\n-    public void doSubscribe(URL url, NotifyListener listener) {\n-        try {\n-            if (ANY_VALUE.equals(url.getServiceInterface())) {\n-                String root = toRootPath();\n-\n-                /*\n-                 *  if we are interested in all interfaces,\n-                 *  find out the current container or create one for the url, put or get only once.\n-                 */\n-                ConcurrentMap<NotifyListener, ChildListener> listeners =\n-                        Optional.ofNullable(etcdListeners.get(url))\n-                                .orElseGet(() -> {\n-                                    ConcurrentMap<NotifyListener, ChildListener> container, prev;\n-                                    prev = etcdListeners.putIfAbsent(url, container = new ConcurrentHashMap<>());\n-                                    return prev != null ? prev : container;\n-                                });\n-\n-                /*\n-                 *  if we have no interface watcher listener,\n-                 *  find the current listener or create one for the current root, put or get only once.\n-                 */\n-                ChildListener interfaceListener =\n-                        Optional.ofNullable(listeners.get(listener))\n-                                .orElseGet(() -> {\n-                                    ChildListener childListener, prev;\n-                                    prev = listeners.putIfAbsent(listener, childListener = (parentPath, currentChildren) -> {\n-                                        /*\n-                                         *  because etcd3 does not support direct children watch events,\n-                                         *  we should filter not interface events. if we watch /dubbo\n-                                         *  and /dubbo/interface, when we put a key-value pair {/dubbo/interface/hello hello},\n-                                         *  we will got events in watching path /dubbo.\n-                                         */\n-                                        for (String child : currentChildren) {\n-                                            child = URL.decode(child);\n-                                            if (!anyServices.contains(child)) {\n-                                                anyServices.add(child);\n-                                                /*\n-                                                 *  if new interface event arrived, we watch their direct children,\n-                                                 *  eg: /dubbo/interface, /dubbo/interface and so on.\n-                                                 */\n-                                                subscribe(url.setPath(child).addParameters(INTERFACE_KEY, child,\n-                                                        CHECK_KEY, String.valueOf(false)), listener);\n-                                            }\n-                                        }\n-                                    });\n-                                    return prev != null ? prev : childListener;\n-                                });\n-\n-                etcdClient.create(root);\n-                /*\n-                 * at the first time, we want to pull already interface and then watch their direct children,\n-                 *  eg: /dubbo/interface, /dubbo/interface and so on.\n-                 */\n-                List<String> services = etcdClient.addChildListener(root, interfaceListener);\n-                for (String service : services) {\n-                    service = URL.decode(service);\n-                    anyServices.add(service);\n-                    subscribe(url.setPath(service).addParameters(INTERFACE_KEY, service,\n-                            CHECK_KEY, String.valueOf(false)), listener);\n-                }\n-            } else {\n-                List<URL> urls = new ArrayList<>();\n-                for (String path : toCategoriesPath(url)) {\n-\n-                    /*\n-                     *  if we are interested in special categories (providers, consumers, routers and so on),\n-                     *  we find out the current container or create one for the url, put or get only once.\n-                     */\n-                    ConcurrentMap<NotifyListener, ChildListener> listeners =\n-                            Optional.ofNullable(etcdListeners.get(url))\n-                                    .orElseGet(() -> {\n-                                        ConcurrentMap<NotifyListener, ChildListener> container, prev;\n-                                        prev = etcdListeners.putIfAbsent(url,\n-                                                container = new ConcurrentHashMap<>());\n-                                        return prev != null ? prev : container;\n-                                    });\n-\n-                    /*\n-                     *  if we have no category watcher listener,\n-                     *  we find out the current listener or create one for the current category, put or get only once.\n-                     */\n-                    ChildListener childListener =\n-                            Optional.ofNullable(listeners.get(listener))\n-                                    .orElseGet(() -> {\n-                                        ChildListener watchListener, prev;\n-                                        prev = listeners.putIfAbsent(listener, watchListener = (parentPath, currentChildren) -> EtcdRegistry.this.notify(url, listener,\n-                                                toUrlsWithEmpty(url, parentPath, currentChildren)));\n-                                        return prev != null ? prev : watchListener;\n-                                    });\n-\n-                    etcdClient.create(path);\n-                    /*\n-                     * at the first time, we want to pull already category and then watch their direct children,\n-                     *  eg: /dubbo/interface/providers, /dubbo/interface/consumers and so on.\n-                     */\n-                    List<String> children = etcdClient.addChildListener(path, childListener);\n-                    if (children != null) {\n-                        urls.addAll(toUrlsWithEmpty(url, path, children));\n-                    }\n-                }\n-                notify(url, listener, urls);\n-            }\n-        } catch (Throwable e) {\n-            throw new RpcException(\"Failed to subscribe \" + url + \" to etcd \" + getUrl()\n-                    + \", cause: \" + (OptionUtil.isProtocolError(e)\n-                    ? \"etcd3 registry may not be supported yet or etcd3 registry is not available.\"\n-                    : e.getMessage()), e);\n-        }\n-    }\n-\n-    @Override\n-    public void doUnsubscribe(URL url, NotifyListener listener) {\n-        ConcurrentMap<NotifyListener, ChildListener> listeners = etcdListeners.get(url);\n-        if (listeners != null) {\n-            ChildListener etcdListener = listeners.get(listener);\n-            if (etcdListener != null) {\n-                // maybe url has many subscribed paths\n-                for (String path : toUnsubscribedPath(url)) {\n-                    etcdClient.removeChildListener(path, etcdListener);\n-                }\n-            }\n-        }\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return etcdClient.isConnected();\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        super.destroy();\n-        try {\n-            etcdClient.close();\n-        } catch (Exception e) {\n-            logger.warn(\"Failed to close etcd client \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    protected String toRootDir() {\n-        if (root.startsWith(PATH_SEPARATOR)) {\n-            return root;\n-        }\n-        return PATH_SEPARATOR + root;\n-    }\n-\n-    protected String toRootPath() {\n-        return root;\n-    }\n-\n-    protected String toServicePath(URL url) {\n-        String name = url.getServiceInterface();\n-        if (ANY_VALUE.equals(name)) {\n-            return toRootPath();\n-        }\n-        return toRootDir() + PATH_SEPARATOR + URL.encode(name);\n-    }\n-\n-    protected String[] toCategoriesPath(URL url) {\n-        String[] categories;\n-        if (ANY_VALUE.equals(url.getParameter(CATEGORY_KEY))) {\n-            categories = new String[]{PROVIDERS_CATEGORY, CONSUMERS_CATEGORY, ROUTERS_CATEGORY, CONFIGURATORS_CATEGORY};\n-        } else {\n-            categories = url.getParameter(CATEGORY_KEY, new String[]{DEFAULT_CATEGORY});\n-        }\n-        String[] paths = new String[categories.length];\n-        for (int i = 0; i < categories.length; i++) {\n-            paths[i] = toServicePath(url) + PATH_SEPARATOR + categories[i];\n-        }\n-        return paths;\n-    }\n-\n-    protected String toCategoryPath(URL url) {\n-        return toServicePath(url) + PATH_SEPARATOR + url.getParameter(CATEGORY_KEY, DEFAULT_CATEGORY);\n-    }\n-\n-    protected String toUrlPath(URL url) {\n-        return toCategoryPath(url) + PATH_SEPARATOR + URL.encode(url.toFullString());\n-    }\n-\n-    protected List<String> toUnsubscribedPath(URL url) {\n-        List<String> categories = new ArrayList<>();\n-        if (ANY_VALUE.equals(url.getServiceInterface())) {\n-            String group = url.getParameter(GROUP_KEY, DEFAULT_ROOT);\n-            if (!group.startsWith(PATH_SEPARATOR)) {\n-                group = PATH_SEPARATOR + group;\n-            }\n-            categories.add(group);\n-            return categories;\n-        } else {\n-            categories.addAll(Arrays.asList(toCategoriesPath(url)));\n-        }\n-        return categories;\n-    }\n-\n-    protected List<URL> toUrlsWithoutEmpty(URL consumer, List<String> providers) {\n-        List<URL> urls = new ArrayList<>();\n-        if (providers != null && providers.size() > 0) {\n-            for (String provider : providers) {\n-                provider = URL.decode(provider);\n-                if (provider.contains(Constants.HTTP_SUBFIX_KEY)) {\n-                    URL url = URL.valueOf(provider);\n-                    if (UrlUtils.isMatch(consumer, url)) {\n-                        urls.add(url);\n-                    }\n-                }\n-            }\n-        }\n-        return urls;\n-    }\n-\n-    protected List<URL> toUrlsWithEmpty(URL consumer, String path, List<String> providers) {\n-        List<URL> urls = toUrlsWithoutEmpty(consumer, providers);\n-        if (urls == null || urls.isEmpty()) {\n-            int i = path.lastIndexOf('/');\n-            String category = i < 0 ? path : path.substring(i + 1);\n-            URL empty = consumer.setProtocol(EMPTY_PROTOCOL).addParameter(CATEGORY_KEY, category);\n-            urls.add(empty);\n-        }\n-        return urls;\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.etcd;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.ConcurrentHashSet;\r\n+import org.apache.dubbo.common.utils.UrlUtils;\r\n+import org.apache.dubbo.registry.NotifyListener;\r\n+import org.apache.dubbo.registry.support.FailbackRegistry;\r\n+import org.apache.dubbo.remoting.etcd.ChildListener;\r\n+import org.apache.dubbo.remoting.etcd.Constants;\r\n+import org.apache.dubbo.remoting.etcd.EtcdClient;\r\n+import org.apache.dubbo.remoting.etcd.EtcdTransporter;\r\n+import org.apache.dubbo.remoting.etcd.StateListener;\r\n+import org.apache.dubbo.remoting.etcd.option.OptionUtil;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.List;\r\n+import java.util.Optional;\r\n+import java.util.Set;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\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_SEPARATOR;\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.DYNAMIC_KEY;\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.remoting.Constants.CHECK_KEY;\r\n+\r\n+\r\n+/**\r\n+ * Support for ectd3 registry.\r\n+ */\r\n+public class EtcdRegistry extends FailbackRegistry {\r\n+\r\n+    private final static int DEFAULT_ETCD_PORT = 2379;\r\n+\r\n+    private final static String DEFAULT_ROOT = \"dubbo\";\r\n+\r\n+    private final String root;\r\n+\r\n+    private final Set<String> anyServices = new ConcurrentHashSet<>();\r\n+\r\n+    private final ConcurrentMap<URL, ConcurrentMap<NotifyListener, ChildListener>> etcdListeners = new ConcurrentHashMap<>();\r\n+    private final EtcdClient etcdClient;\r\n+\r\n+    public EtcdRegistry(URL url, EtcdTransporter etcdTransporter) {\r\n+        super(url);\r\n+        if (url.isAnyHost()) {\r\n+            throw new IllegalStateException(\"registry address is invalid, actual: '\" + url.getHost() + \"'\");\r\n+        }\r\n+        String group = url.getParameter(GROUP_KEY, DEFAULT_ROOT);\r\n+        if (!group.startsWith(PATH_SEPARATOR)) {\r\n+            group = PATH_SEPARATOR + group;\r\n+        }\r\n+        this.root = group;\r\n+        etcdClient = etcdTransporter.connect(url);\r\n+\r\n+        etcdClient.addStateListener(state -> {\r\n+            if (state == StateListener.CONNECTED) {\r\n+                try {\r\n+                    recover();\r\n+                } catch (Exception e) {\r\n+                    logger.error(e.getMessage(), e);\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    protected static String appendDefaultPort(String address) {\r\n+        if (address != null && address.length() > 0) {\r\n+            int i = address.indexOf(':');\r\n+            if (i < 0) {\r\n+                return address + \":\" + DEFAULT_ETCD_PORT;\r\n+            } else if (Integer.parseInt(address.substring(i + 1)) == 0) {\r\n+                return address.substring(0, i + 1) + DEFAULT_ETCD_PORT;\r\n+            }\r\n+        }\r\n+        return address;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doRegister(URL url) {\r\n+        try {\r\n+            String path = toUrlPath(url);\r\n+            if (url.getParameter(DYNAMIC_KEY, true)) {\r\n+                etcdClient.createEphemeral(path);\r\n+                return;\r\n+            }\r\n+            etcdClient.create(path);\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(\"Failed to register \" + url + \" to etcd \" + getUrl()\r\n+                    + \", cause: \" + (OptionUtil.isProtocolError(e)\r\n+                    ? \"etcd3 registry may not be supported yet or etcd3 registry is not available.\"\r\n+                    : e.getMessage()), e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doUnregister(URL url) {\r\n+        try {\r\n+            String path = toUrlPath(url);\r\n+            etcdClient.delete(path);\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(\"Failed to unregister \" + url + \" to etcd \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doSubscribe(URL url, NotifyListener listener) {\r\n+        try {\r\n+            if (ANY_VALUE.equals(url.getServiceInterface())) {\r\n+                String root = toRootPath();\r\n+\r\n+                /*\r\n+                 *  if we are interested in all interfaces,\r\n+                 *  find out the current container or create one for the url, put or get only once.\r\n+                 */\r\n+                ConcurrentMap<NotifyListener, ChildListener> listeners =\r\n+                        Optional.ofNullable(etcdListeners.get(url))\r\n+                                .orElseGet(() -> {\r\n+                                    ConcurrentMap<NotifyListener, ChildListener> container, prev;\r\n+                                    prev = etcdListeners.putIfAbsent(url, container = new ConcurrentHashMap<>());\r\n+                                    return prev != null ? prev : container;\r\n+                                });\r\n+\r\n+                /*\r\n+                 *  if we have no interface watcher listener,\r\n+                 *  find the current listener or create one for the current root, put or get only once.\r\n+                 */\r\n+                ChildListener interfaceListener =\r\n+                        Optional.ofNullable(listeners.get(listener))\r\n+                                .orElseGet(() -> {\r\n+                                    ChildListener childListener, prev;\r\n+                                    prev = listeners.putIfAbsent(listener, childListener = (parentPath, currentChildren) -> {\r\n+                                        /*\r\n+                                         *  because etcd3 does not support direct children watch events,\r\n+                                         *  we should filter not interface events. if we watch /dubbo\r\n+                                         *  and /dubbo/interface, when we put a key-value pair {/dubbo/interface/hello hello},\r\n+                                         *  we will got events in watching path /dubbo.\r\n+                                         */\r\n+                                        for (String child : currentChildren) {\r\n+                                            child = URL.decode(child);\r\n+                                            if (!anyServices.contains(child)) {\r\n+                                                anyServices.add(child);\r\n+                                                /*\r\n+                                                 *  if new interface event arrived, we watch their direct children,\r\n+                                                 *  eg: /dubbo/interface, /dubbo/interface and so on.\r\n+                                                 */\r\n+                                                subscribe(url.setPath(child).addParameters(INTERFACE_KEY, child,\r\n+                                                        CHECK_KEY, String.valueOf(false)), listener);\r\n+                                            }\r\n+                                        }\r\n+                                    });\r\n+                                    return prev != null ? prev : childListener;\r\n+                                });\r\n+\r\n+                etcdClient.create(root);\r\n+                /*\r\n+                 * at the first time, we want to pull already interface and then watch their direct children,\r\n+                 *  eg: /dubbo/interface, /dubbo/interface and so on.\r\n+                 */\r\n+                List<String> services = etcdClient.addChildListener(root, interfaceListener);\r\n+                for (String service : services) {\r\n+                    service = URL.decode(service);\r\n+                    anyServices.add(service);\r\n+                    subscribe(url.setPath(service).addParameters(INTERFACE_KEY, service,\r\n+                            CHECK_KEY, String.valueOf(false)), listener);\r\n+                }\r\n+            } else {\r\n+                List<URL> urls = new ArrayList<>();\r\n+                for (String path : toCategoriesPath(url)) {\r\n+\r\n+                    /*\r\n+                     *  if we are interested in special categories (providers, consumers, routers and so on),\r\n+                     *  we find out the current container or create one for the url, put or get only once.\r\n+                     */\r\n+                    ConcurrentMap<NotifyListener, ChildListener> listeners =\r\n+                            Optional.ofNullable(etcdListeners.get(url))\r\n+                                    .orElseGet(() -> {\r\n+                                        ConcurrentMap<NotifyListener, ChildListener> container, prev;\r\n+                                        prev = etcdListeners.putIfAbsent(url,\r\n+                                                container = new ConcurrentHashMap<>());\r\n+                                        return prev != null ? prev : container;\r\n+                                    });\r\n+\r\n+                    /*\r\n+                     *  if we have no category watcher listener,\r\n+                     *  we find out the current listener or create one for the current category, put or get only once.\r\n+                     */\r\n+                    ChildListener childListener =\r\n+                            Optional.ofNullable(listeners.get(listener))\r\n+                                    .orElseGet(() -> {\r\n+                                        ChildListener watchListener, prev;\r\n+                                        prev = listeners.putIfAbsent(listener, watchListener = (parentPath, currentChildren) -> EtcdRegistry.this.notify(url, listener,\r\n+                                                toUrlsWithEmpty(url, parentPath, currentChildren)));\r\n+                                        return prev != null ? prev : watchListener;\r\n+                                    });\r\n+\r\n+                    etcdClient.create(path);\r\n+                    /*\r\n+                     * at the first time, we want to pull already category and then watch their direct children,\r\n+                     *  eg: /dubbo/interface/providers, /dubbo/interface/consumers and so on.\r\n+                     */\r\n+                    List<String> children = etcdClient.addChildListener(path, childListener);\r\n+                    if (children != null) {\r\n+                        urls.addAll(toUrlsWithEmpty(url, path, children));\r\n+                    }\r\n+                }\r\n+                notify(url, listener, urls);\r\n+            }\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(\"Failed to subscribe \" + url + \" to etcd \" + getUrl()\r\n+                    + \", cause: \" + (OptionUtil.isProtocolError(e)\r\n+                    ? \"etcd3 registry may not be supported yet or etcd3 registry is not available.\"\r\n+                    : e.getMessage()), e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doUnsubscribe(URL url, NotifyListener listener) {\r\n+        ConcurrentMap<NotifyListener, ChildListener> listeners = etcdListeners.get(url);\r\n+        if (listeners != null) {\r\n+            ChildListener etcdListener = listeners.get(listener);\r\n+            if (etcdListener != null) {\r\n+                // maybe url has many subscribed paths\r\n+                for (String path : toUnsubscribedPath(url)) {\r\n+                    etcdClient.removeChildListener(path, etcdListener);\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return etcdClient.isConnected();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        super.destroy();\r\n+        try {\r\n+            etcdClient.close();\r\n+        } catch (Exception e) {\r\n+            logger.warn(\"Failed to close etcd client \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    protected String toRootDir() {\r\n+        if (root.startsWith(PATH_SEPARATOR)) {\r\n+            return root;\r\n+        }\r\n+        return PATH_SEPARATOR + root;\r\n+    }\r\n+\r\n+    protected String toRootPath() {\r\n+        return root;\r\n+    }\r\n+\r\n+    protected String toServicePath(URL url) {\r\n+        String name = url.getServiceInterface();\r\n+        if (ANY_VALUE.equals(name)) {\r\n+            return toRootPath();\r\n+        }\r\n+        return toRootDir() + PATH_SEPARATOR + URL.encode(name);\r\n+    }\r\n+\r\n+    protected String[] toCategoriesPath(URL url) {\r\n+        String[] categories;\r\n+        if (ANY_VALUE.equals(url.getParameter(CATEGORY_KEY))) {\r\n+            categories = new String[]{PROVIDERS_CATEGORY, CONSUMERS_CATEGORY, ROUTERS_CATEGORY, CONFIGURATORS_CATEGORY};\r\n+        } else {\r\n+            categories = url.getParameter(CATEGORY_KEY, new String[]{DEFAULT_CATEGORY});\r\n+        }\r\n+        String[] paths = new String[categories.length];\r\n+        for (int i = 0; i < categories.length; i++) {\r\n+            paths[i] = toServicePath(url) + PATH_SEPARATOR + categories[i];\r\n+        }\r\n+        return paths;\r\n+    }\r\n+\r\n+    protected String toCategoryPath(URL url) {\r\n+        return toServicePath(url) + PATH_SEPARATOR + url.getParameter(CATEGORY_KEY, DEFAULT_CATEGORY);\r\n+    }\r\n+\r\n+    protected String toUrlPath(URL url) {\r\n+        return toCategoryPath(url) + PATH_SEPARATOR + URL.encode(url.toFullString());\r\n+    }\r\n+\r\n+    protected List<String> toUnsubscribedPath(URL url) {\r\n+        List<String> categories = new ArrayList<>();\r\n+        if (ANY_VALUE.equals(url.getServiceInterface())) {\r\n+            String group = url.getParameter(GROUP_KEY, DEFAULT_ROOT);\r\n+            if (!group.startsWith(PATH_SEPARATOR)) {\r\n+                group = PATH_SEPARATOR + group;\r\n+            }\r\n+            categories.add(group);\r\n+            return categories;\r\n+        } else {\r\n+            categories.addAll(Arrays.asList(toCategoriesPath(url)));\r\n+        }\r\n+        return categories;\r\n+    }\r\n+\r\n+    protected List<URL> toUrlsWithoutEmpty(URL consumer, List<String> providers) {\r\n+        List<URL> urls = new ArrayList<>();\r\n+        if (providers != null && providers.size() > 0) {\r\n+            for (String provider : providers) {\r\n+                provider = URL.decode(provider);\r\n+                if (provider.contains(Constants.HTTP_SUBFIX_KEY)) {\r\n+                    URL url = URL.valueOf(provider);\r\n+                    if (UrlUtils.isMatch(consumer, url)) {\r\n+                        urls.add(url);\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+        return urls;\r\n+    }\r\n+\r\n+    protected List<URL> toUrlsWithEmpty(URL consumer, String path, List<String> providers) {\r\n+        List<URL> urls = toUrlsWithoutEmpty(consumer, providers);\r\n+        if (urls == null || urls.isEmpty()) {\r\n+            int i = path.lastIndexOf('/');\r\n+            String category = i < 0 ? path : path.substring(i + 1);\r\n+            URL empty = consumer.setProtocol(EMPTY_PROTOCOL).addParameter(CATEGORY_KEY, category);\r\n+            urls.add(empty);\r\n+        }\r\n+        return urls;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/etcd/EtcdRegistryFactory.java", "source2": "org/apache/dubbo/registry/etcd/EtcdRegistryFactory.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,36 +1,36 @@\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.etcd;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.registry.Registry;\n-import org.apache.dubbo.registry.support.AbstractRegistryFactory;\n-import org.apache.dubbo.remoting.etcd.EtcdTransporter;\n-\n-public class EtcdRegistryFactory extends AbstractRegistryFactory {\n-\n-    private EtcdTransporter etcdTransporter;\n-\n-    @Override\n-    protected Registry createRegistry(URL url) {\n-        return new EtcdRegistry(url, etcdTransporter);\n-    }\n-\n-    public void setEtcdTransporter(EtcdTransporter etcdTransporter) {\n-        this.etcdTransporter = etcdTransporter;\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.etcd;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.registry.Registry;\r\n+import org.apache.dubbo.registry.support.AbstractRegistryFactory;\r\n+import org.apache.dubbo.remoting.etcd.EtcdTransporter;\r\n+\r\n+public class EtcdRegistryFactory extends AbstractRegistryFactory {\r\n+\r\n+    private EtcdTransporter etcdTransporter;\r\n+\r\n+    @Override\r\n+    protected Registry createRegistry(URL url) {\r\n+        return new EtcdRegistry(url, etcdTransporter);\r\n+    }\r\n+\r\n+    public void setEtcdTransporter(EtcdTransporter etcdTransporter) {\r\n+        this.etcdTransporter = etcdTransporter;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/registry/etcd/EtcdServiceDiscovery.java", "source2": "org/apache/dubbo/registry/etcd/EtcdServiceDiscovery.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,206 +1,206 @@\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.etcd;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.ConcurrentHashSet;\n-import org.apache.dubbo.event.EventDispatcher;\n-import org.apache.dubbo.event.EventListener;\n-import org.apache.dubbo.registry.client.AbstractServiceDiscovery;\n-import org.apache.dubbo.registry.client.DefaultServiceInstance;\n-import org.apache.dubbo.registry.client.ServiceInstance;\n-import org.apache.dubbo.registry.client.event.ServiceInstancesChangedEvent;\n-import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;\n-import org.apache.dubbo.remoting.etcd.ChildListener;\n-import org.apache.dubbo.remoting.etcd.EtcdClient;\n-import org.apache.dubbo.remoting.etcd.EtcdTransporter;\n-import org.apache.dubbo.remoting.etcd.StateListener;\n-import org.apache.dubbo.remoting.etcd.option.OptionUtil;\n-import org.apache.dubbo.rpc.RpcException;\n-\n-import com.google.gson.Gson;\n-\n-import java.io.File;\n-import java.util.ArrayList;\n-import java.util.Collections;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Optional;\n-import java.util.Set;\n-import java.util.concurrent.ConcurrentHashMap;\n-\n-/**\n- * 2019-07-08\n- */\n-public class EtcdServiceDiscovery extends AbstractServiceDiscovery implements EventListener<ServiceInstancesChangedEvent> {\n-\n-    private final static Logger logger = LoggerFactory.getLogger(EtcdServiceDiscovery.class);\n-\n-    private final String root = \"/services\";\n-\n-    private final Set<String> services = new ConcurrentHashSet<>();\n-    private final Map<String, ChildListener> childListenerMap = new ConcurrentHashMap<>();\n-\n-    EtcdClient etcdClient;\n-    EventDispatcher dispatcher;\n-\n-    @Override\n-    public void onEvent(ServiceInstancesChangedEvent event) {\n-        registerServiceWatcher(event.getServiceName());\n-    }\n-\n-    @Override\n-    public void initialize(URL registryURL) throws Exception {\n-\n-        EtcdTransporter etcdTransporter = ExtensionLoader.getExtensionLoader(EtcdTransporter.class).getAdaptiveExtension();\n-\n-        if (registryURL.isAnyHost()) {\n-            throw new IllegalStateException(\"Service discovery address is invalid, actual: '\" + registryURL.getHost() + \"'\");\n-        }\n-\n-        etcdClient = etcdTransporter.connect(registryURL);\n-\n-        etcdClient.addStateListener(state -> {\n-            if (state == StateListener.CONNECTED) {\n-                try {\n-                    recover();\n-                } catch (Exception e) {\n-                    logger.error(e.getMessage(), e);\n-                }\n-            }\n-        });\n-\n-        this.dispatcher = EventDispatcher.getDefaultExtension();\n-        this.dispatcher.addEventListener(this);\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        if (etcdClient != null && etcdClient.isConnected()) {\n-            etcdClient.close();\n-        }\n-    }\n-\n-    @Override\n-    public void doRegister(ServiceInstance serviceInstance) {\n-        try {\n-            String path = toPath(serviceInstance);\n-//            etcdClient.createEphemeral(path);\n-            etcdClient.putEphemeral(path, new Gson().toJson(serviceInstance));\n-            services.add(serviceInstance.getServiceName());\n-        } catch (Throwable e) {\n-            throw new RpcException(\"Failed to register \" + serviceInstance + \" to etcd \" + etcdClient.getUrl()\n-                    + \", cause: \" + (OptionUtil.isProtocolError(e)\n-                    ? \"etcd3 registry may not be supported yet or etcd3 registry is not available.\"\n-                    : e.getMessage()), e);\n-        }\n-    }\n-\n-    String toPath(ServiceInstance serviceInstance) {\n-        return root + File.separator + serviceInstance.getServiceName() + File.separator + serviceInstance.getHost()\n-                + \":\" + serviceInstance.getPort();\n-    }\n-\n-    String toParentPath(String serviceName) {\n-        return root + File.separator + serviceName;\n-    }\n-\n-    @Override\n-    public void doUpdate(ServiceInstance serviceInstance) {\n-        try {\n-            String path = toPath(serviceInstance);\n-            etcdClient.putEphemeral(path, new Gson().toJson(serviceInstance));\n-            services.add(serviceInstance.getServiceName());\n-        } catch (Throwable e) {\n-            throw new RpcException(\"Failed to register \" + serviceInstance + \" to etcd \" + etcdClient.getUrl()\n-                    + \", cause: \" + (OptionUtil.isProtocolError(e)\n-                    ? \"etcd3 registry may not be supported yet or etcd3 registry is not available.\"\n-                    : e.getMessage()), e);\n-        }\n-    }\n-\n-    @Override\n-    public void unregister(ServiceInstance serviceInstance) throws RuntimeException {\n-        try {\n-            String path = toPath(serviceInstance);\n-            etcdClient.delete(path);\n-            services.remove(serviceInstance.getServiceName());\n-            this.serviceInstance = null;\n-        } catch (Throwable e) {\n-            throw new RpcException(\"Failed to unregister \" + serviceInstance + \" to etcd \" + etcdClient.getUrl() + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-    @Override\n-    public Set<String> getServices() {\n-        return Collections.unmodifiableSet(services);\n-    }\n-\n-    @Override\n-    public void addServiceInstancesChangedListener(ServiceInstancesChangedListener listener) throws NullPointerException, IllegalArgumentException {\n-        listener.getServiceNames().forEach(serviceName -> registerServiceWatcher(serviceName));\n-    }\n-\n-    @Override\n-    public List<ServiceInstance> getInstances(String serviceName) {\n-        List<String> children = etcdClient.getChildren(toParentPath(serviceName));\n-        if (CollectionUtils.isEmpty(children)) {\n-            return Collections.EMPTY_LIST;\n-        }\n-        List<ServiceInstance> list = new ArrayList<>(children.size());\n-        for (String child : children) {\n-            ServiceInstance serviceInstance = new Gson().fromJson(etcdClient.getKVValue(child), DefaultServiceInstance.class);\n-            list.add(serviceInstance);\n-        }\n-        return list;\n-    }\n-\n-\n-    protected void registerServiceWatcher(String serviceName) {\n-        String path = root + File.separator + serviceName;\n-        /*\n-         *  if we have no category watcher listener,\n-         *  we find out the current listener or create one for the current category, put or get only once.\n-         */\n-        ChildListener childListener =\n-                Optional.ofNullable(childListenerMap.get(serviceName))\n-                        .orElseGet(() -> {\n-                            ChildListener watchListener, prev;\n-                            prev = childListenerMap.putIfAbsent(serviceName, watchListener = (parentPath, currentChildren) ->\n-                                    dispatchServiceInstancesChangedEvent(serviceName));\n-                            return prev != null ? prev : watchListener;\n-                        });\n-\n-        etcdClient.create(path);\n-\n-        etcdClient.addChildListener(path, childListener);\n-    }\n-\n-    private void recover() throws Exception {\n-        // register\n-        if (serviceInstance != null) {\n-            if (logger.isInfoEnabled()) {\n-                logger.info(\"Recover application register: \" + serviceInstance);\n-            }\n-            register(serviceInstance);\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.etcd;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\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.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.ConcurrentHashSet;\r\n+import org.apache.dubbo.event.EventDispatcher;\r\n+import org.apache.dubbo.event.EventListener;\r\n+import org.apache.dubbo.registry.client.AbstractServiceDiscovery;\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.client.event.ServiceInstancesChangedEvent;\r\n+import org.apache.dubbo.registry.client.event.listener.ServiceInstancesChangedListener;\r\n+import org.apache.dubbo.remoting.etcd.ChildListener;\r\n+import org.apache.dubbo.remoting.etcd.EtcdClient;\r\n+import org.apache.dubbo.remoting.etcd.EtcdTransporter;\r\n+import org.apache.dubbo.remoting.etcd.StateListener;\r\n+import org.apache.dubbo.remoting.etcd.option.OptionUtil;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+\r\n+import com.google.gson.Gson;\r\n+\r\n+import java.io.File;\r\n+import java.util.ArrayList;\r\n+import java.util.Collections;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Optional;\r\n+import java.util.Set;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+\r\n+/**\r\n+ * 2019-07-08\r\n+ */\r\n+public class EtcdServiceDiscovery extends AbstractServiceDiscovery implements EventListener<ServiceInstancesChangedEvent> {\r\n+\r\n+    private final static Logger logger = LoggerFactory.getLogger(EtcdServiceDiscovery.class);\r\n+\r\n+    private final String root = \"/services\";\r\n+\r\n+    private final Set<String> services = new ConcurrentHashSet<>();\r\n+    private final Map<String, ChildListener> childListenerMap = new ConcurrentHashMap<>();\r\n+\r\n+    EtcdClient etcdClient;\r\n+    EventDispatcher dispatcher;\r\n+\r\n+    @Override\r\n+    public void onEvent(ServiceInstancesChangedEvent event) {\r\n+        registerServiceWatcher(event.getServiceName());\r\n+    }\r\n+\r\n+    @Override\r\n+    public void initialize(URL registryURL) throws Exception {\r\n+\r\n+        EtcdTransporter etcdTransporter = ExtensionLoader.getExtensionLoader(EtcdTransporter.class).getAdaptiveExtension();\r\n+\r\n+        if (registryURL.isAnyHost()) {\r\n+            throw new IllegalStateException(\"Service discovery address is invalid, actual: '\" + registryURL.getHost() + \"'\");\r\n+        }\r\n+\r\n+        etcdClient = etcdTransporter.connect(registryURL);\r\n+\r\n+        etcdClient.addStateListener(state -> {\r\n+            if (state == StateListener.CONNECTED) {\r\n+                try {\r\n+                    recover();\r\n+                } catch (Exception e) {\r\n+                    logger.error(e.getMessage(), e);\r\n+                }\r\n+            }\r\n+        });\r\n+\r\n+        this.dispatcher = EventDispatcher.getDefaultExtension();\r\n+        this.dispatcher.addEventListener(this);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        if (etcdClient != null && etcdClient.isConnected()) {\r\n+            etcdClient.close();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doRegister(ServiceInstance serviceInstance) {\r\n+        try {\r\n+            String path = toPath(serviceInstance);\r\n+//            etcdClient.createEphemeral(path);\r\n+            etcdClient.putEphemeral(path, new Gson().toJson(serviceInstance));\r\n+            services.add(serviceInstance.getServiceName());\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(\"Failed to register \" + serviceInstance + \" to etcd \" + etcdClient.getUrl()\r\n+                    + \", cause: \" + (OptionUtil.isProtocolError(e)\r\n+                    ? \"etcd3 registry may not be supported yet or etcd3 registry is not available.\"\r\n+                    : e.getMessage()), e);\r\n+        }\r\n+    }\r\n+\r\n+    String toPath(ServiceInstance serviceInstance) {\r\n+        return root + File.separator + serviceInstance.getServiceName() + File.separator + serviceInstance.getHost()\r\n+                + \":\" + serviceInstance.getPort();\r\n+    }\r\n+\r\n+    String toParentPath(String serviceName) {\r\n+        return root + File.separator + serviceName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void doUpdate(ServiceInstance serviceInstance) {\r\n+        try {\r\n+            String path = toPath(serviceInstance);\r\n+            etcdClient.putEphemeral(path, new Gson().toJson(serviceInstance));\r\n+            services.add(serviceInstance.getServiceName());\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(\"Failed to register \" + serviceInstance + \" to etcd \" + etcdClient.getUrl()\r\n+                    + \", cause: \" + (OptionUtil.isProtocolError(e)\r\n+                    ? \"etcd3 registry may not be supported yet or etcd3 registry is not available.\"\r\n+                    : e.getMessage()), e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void unregister(ServiceInstance serviceInstance) throws RuntimeException {\r\n+        try {\r\n+            String path = toPath(serviceInstance);\r\n+            etcdClient.delete(path);\r\n+            services.remove(serviceInstance.getServiceName());\r\n+            this.serviceInstance = null;\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(\"Failed to unregister \" + serviceInstance + \" to etcd \" + etcdClient.getUrl() + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public Set<String> getServices() {\r\n+        return Collections.unmodifiableSet(services);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addServiceInstancesChangedListener(ServiceInstancesChangedListener listener) throws NullPointerException, IllegalArgumentException {\r\n+        listener.getServiceNames().forEach(serviceName -> registerServiceWatcher(serviceName));\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<ServiceInstance> getInstances(String serviceName) {\r\n+        List<String> children = etcdClient.getChildren(toParentPath(serviceName));\r\n+        if (CollectionUtils.isEmpty(children)) {\r\n+            return Collections.EMPTY_LIST;\r\n+        }\r\n+        List<ServiceInstance> list = new ArrayList<>(children.size());\r\n+        for (String child : children) {\r\n+            ServiceInstance serviceInstance = new Gson().fromJson(etcdClient.getKVValue(child), DefaultServiceInstance.class);\r\n+            list.add(serviceInstance);\r\n+        }\r\n+        return list;\r\n+    }\r\n+\r\n+\r\n+    protected void registerServiceWatcher(String serviceName) {\r\n+        String path = root + File.separator + serviceName;\r\n+        /*\r\n+         *  if we have no category watcher listener,\r\n+         *  we find out the current listener or create one for the current category, put or get only once.\r\n+         */\r\n+        ChildListener childListener =\r\n+                Optional.ofNullable(childListenerMap.get(serviceName))\r\n+                        .orElseGet(() -> {\r\n+                            ChildListener watchListener, prev;\r\n+                            prev = childListenerMap.putIfAbsent(serviceName, watchListener = (parentPath, currentChildren) ->\r\n+                                    dispatchServiceInstancesChangedEvent(serviceName));\r\n+                            return prev != null ? prev : watchListener;\r\n+                        });\r\n+\r\n+        etcdClient.create(path);\r\n+\r\n+        etcdClient.addChildListener(path, childListener);\r\n+    }\r\n+\r\n+    private void recover() throws Exception {\r\n+        // register\r\n+        if (serviceInstance != null) {\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(\"Recover application register: \" + serviceInstance);\r\n+            }\r\n+            register(serviceInstance);\r\n+        }\r\n+    }\r\n+}\r\n"}]}
