{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,38 +1,38 @@\n-Zip file size: 93393 bytes, number of entries: 36\n+Zip file size: 95070 bytes, number of entries: 36\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n -rw----     2.0 fat     6167 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      173 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       55 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.remoting.Codec2\n -rw----     2.0 fat       58 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol\n -rw----     2.0 fat      136 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.rpc.protocol.thrift.ClassNameGenerator\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-rpc-thrift/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-rpc-thrift/pom.properties\n--rw----     2.0 fat     3202 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-rpc-thrift/pom.xml\n+-rw----     2.0 fat     3119 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-rpc-thrift/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/rpc/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/\n--rw----     2.0 fat     1219 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ClassNameGenerator.java\n--rw----     2.0 fat     1436 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/DubboClassNameGenerator.java\n+-rw----     2.0 fat     1250 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ClassNameGenerator.java\n+-rw----     2.0 fat     1472 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/DubboClassNameGenerator.java\n -rw----     2.0 fat     1486 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftClassNameGenerator.java\n--rw----     2.0 fat    24656 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java\n--rw----     2.0 fat     1320 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftConstants.java\n--rw----     2.0 fat     6104 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftInvoker.java\n--rw----     2.0 fat     3891 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftNativeCodec.java\n--rw----     2.0 fat     9871 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java\n--rw----     2.0 fat     1644 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftType.java\n--rw----     2.0 fat     4218 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftUtils.java\n+-rw----     2.0 fat    25354 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java\n+-rw----     2.0 fat     1352 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftConstants.java\n+-rw----     2.0 fat     6275 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftInvoker.java\n+-rw----     2.0 fat     3987 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftNativeCodec.java\n+-rw----     2.0 fat    10143 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java\n+-rw----     2.0 fat     1695 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftType.java\n+-rw----     2.0 fat     4353 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ThriftUtils.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ext/\n--rw----     2.0 fat     4158 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ext/MultiServiceProcessor.java\n+-rw----     2.0 fat     4279 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/ext/MultiServiceProcessor.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/io/\n -rw----     2.0 fat     2385 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/io/InputStreamWrapper.java\n--rw----     2.0 fat     3057 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/io/RandomAccessByteArrayOutputStream.java\n-36 files, 86619 bytes uncompressed, 86619 bytes compressed:  0.0%\n+-rw----     2.0 fat     3174 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/thrift/io/RandomAccessByteArrayOutputStream.java\n+36 files, 88296 bytes uncompressed, 88296 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -369,1622 +369,1622 @@\n #\n 04AFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 04B01   Length              0005 (5)\n 04B03   Flags               01 (1) 'Modification'\n 04B04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 04B08 PAYLOAD\n \n-0578A DATA DESCRIPTOR       08074B50 (134695760)\n-0578E CRC                   2B7AF38C (729478028)\n-05792 Compressed Size       00000C82 (3202)\n-05796 Uncompressed Size     00000C82 (3202)\n-\n-0579A LOCAL HEADER #16      04034B50 (67324752)\n-0579E Extract Zip Spec      14 (20) '2.0'\n-0579F Extract OS            00 (0) 'MS-DOS'\n-057A0 General Purpose Flag  0000 (0)\n-057A2 Compression Method    0000 (0) 'Stored'\n-057A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-057A8 CRC                   00000000 (0)\n-057AC Compressed Size       00000000 (0)\n-057B0 Uncompressed Size     00000000 (0)\n-057B4 Filename Length       0004 (4)\n-057B6 Extra Length          0009 (9)\n-057B8 Filename              'XXXX'\n-#\n-# WARNING: Offset 0x57B8: Filename 'XXXX'\n-#          Zero length filename\n-#\n-057BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-057BE   Length              0005 (5)\n-057C0   Flags               01 (1) 'Modification'\n-057C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-057C5 LOCAL HEADER #17      04034B50 (67324752)\n-057C9 Extract Zip Spec      14 (20) '2.0'\n-057CA Extract OS            00 (0) 'MS-DOS'\n-057CB General Purpose Flag  0000 (0)\n-057CD Compression Method    0000 (0) 'Stored'\n-057CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-057D3 CRC                   00000000 (0)\n-057D7 Compressed Size       00000000 (0)\n-057DB Uncompressed Size     00000000 (0)\n-057DF Filename Length       000B (11)\n-057E1 Extra Length          0009 (9)\n-057E3 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x57E3: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-057EE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-057F0   Length              0005 (5)\n-057F2   Flags               01 (1) 'Modification'\n-057F3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-057F7 LOCAL HEADER #18      04034B50 (67324752)\n-057FB Extract Zip Spec      14 (20) '2.0'\n-057FC Extract OS            00 (0) 'MS-DOS'\n-057FD General Purpose Flag  0000 (0)\n-057FF Compression Method    0000 (0) 'Stored'\n-05801 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05805 CRC                   00000000 (0)\n-05809 Compressed Size       00000000 (0)\n-0580D Uncompressed Size     00000000 (0)\n-05811 Filename Length       0011 (17)\n-05813 Extra Length          0009 (9)\n-05815 Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5815: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05826 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05828   Length              0005 (5)\n-0582A   Flags               01 (1) 'Modification'\n-0582B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0582F LOCAL HEADER #19      04034B50 (67324752)\n-05833 Extract Zip Spec      14 (20) '2.0'\n-05834 Extract OS            00 (0) 'MS-DOS'\n-05835 General Purpose Flag  0000 (0)\n-05837 Compression Method    0000 (0) 'Stored'\n-05839 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0583D CRC                   00000000 (0)\n-05841 Compressed Size       00000000 (0)\n-05845 Uncompressed Size     00000000 (0)\n-05849 Filename Length       0015 (21)\n-0584B Extra Length          0009 (9)\n-0584D Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x584D: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05862 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05864   Length              0005 (5)\n-05866   Flags               01 (1) 'Modification'\n-05867   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0586B LOCAL HEADER #20      04034B50 (67324752)\n-0586F Extract Zip Spec      14 (20) '2.0'\n-05870 Extract OS            00 (0) 'MS-DOS'\n-05871 General Purpose Flag  0000 (0)\n-05873 Compression Method    0000 (0) 'Stored'\n-05875 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05879 CRC                   00000000 (0)\n-0587D Compressed Size       00000000 (0)\n-05881 Uncompressed Size     00000000 (0)\n-05885 Filename Length       001E (30)\n-05887 Extra Length          0009 (9)\n-05889 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5889: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-058A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-058A9   Length              0005 (5)\n-058AB   Flags               01 (1) 'Modification'\n-058AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-058B0 LOCAL HEADER #21      04034B50 (67324752)\n-058B4 Extract Zip Spec      14 (20) '2.0'\n-058B5 Extract OS            00 (0) 'MS-DOS'\n-058B6 General Purpose Flag  0000 (0)\n-058B8 Compression Method    0000 (0) 'Stored'\n-058BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-058BE CRC                   00000000 (0)\n-058C2 Compressed Size       00000000 (0)\n-058C6 Uncompressed Size     00000000 (0)\n-058CA Filename Length       0025 (37)\n-058CC Extra Length          0009 (9)\n-058CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x58CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-058F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-058F5   Length              0005 (5)\n-058F7   Flags               01 (1) 'Modification'\n-058F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-058FC LOCAL HEADER #22      04034B50 (67324752)\n-05900 Extract Zip Spec      14 (20) '2.0'\n-05901 Extract OS            00 (0) 'MS-DOS'\n-05902 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-05904 Compression Method    0000 (0) 'Stored'\n-05906 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0590A CRC                   00000000 (0)\n-0590E Compressed Size       00000000 (0)\n-05912 Uncompressed Size     00000000 (0)\n-05916 Filename Length       003C (60)\n-05918 Extra Length          0009 (9)\n-0591A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x591A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05956 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05958   Length              0005 (5)\n-0595A   Flags               01 (1) 'Modification'\n-0595B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0595F PAYLOAD\n-\n-05E22 DATA DESCRIPTOR       08074B50 (134695760)\n-05E26 CRC                   338329BB (864233915)\n-05E2A Compressed Size       000004C3 (1219)\n-05E2E Uncompressed Size     000004C3 (1219)\n-\n-05E32 LOCAL HEADER #23      04034B50 (67324752)\n-05E36 Extract Zip Spec      14 (20) '2.0'\n-05E37 Extract OS            00 (0) 'MS-DOS'\n-05E38 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-05E3A Compression Method    0000 (0) 'Stored'\n-05E3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05E40 CRC                   00000000 (0)\n-05E44 Compressed Size       00000000 (0)\n-05E48 Uncompressed Size     00000000 (0)\n-05E4C Filename Length       0041 (65)\n-05E4E Extra Length          0009 (9)\n-05E50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5E50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05E91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05E93   Length              0005 (5)\n-05E95   Flags               01 (1) 'Modification'\n-05E96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05E9A PAYLOAD\n-\n-06436 DATA DESCRIPTOR       08074B50 (134695760)\n-0643A CRC                   3B13030C (991101708)\n-0643E Compressed Size       0000059C (1436)\n-06442 Uncompressed Size     0000059C (1436)\n-\n-06446 LOCAL HEADER #24      04034B50 (67324752)\n-0644A Extract Zip Spec      14 (20) '2.0'\n-0644B Extract OS            00 (0) 'MS-DOS'\n-0644C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0644E Compression Method    0000 (0) 'Stored'\n-06450 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06454 CRC                   00000000 (0)\n-06458 Compressed Size       00000000 (0)\n-0645C Uncompressed Size     00000000 (0)\n-06460 Filename Length       0042 (66)\n-06462 Extra Length          0009 (9)\n-06464 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6464: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-064A6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-064A8   Length              0005 (5)\n-064AA   Flags               01 (1) 'Modification'\n-064AB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-064AF PAYLOAD\n-\n-06A7D DATA DESCRIPTOR       08074B50 (134695760)\n-06A81 CRC                   45D210E4 (1171394788)\n-06A85 Compressed Size       000005CE (1486)\n-06A89 Uncompressed Size     000005CE (1486)\n-\n-06A8D LOCAL HEADER #25      04034B50 (67324752)\n-06A91 Extract Zip Spec      14 (20) '2.0'\n-06A92 Extract OS            00 (0) 'MS-DOS'\n-06A93 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-06A95 Compression Method    0000 (0) 'Stored'\n-06A97 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-06A9B CRC                   00000000 (0)\n-06A9F Compressed Size       00000000 (0)\n-06AA3 Uncompressed Size     00000000 (0)\n-06AA7 Filename Length       0035 (53)\n-06AA9 Extra Length          0009 (9)\n-06AAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x6AAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-06AE0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-06AE2   Length              0005 (5)\n-06AE4   Flags               01 (1) 'Modification'\n-06AE5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-06AE9 PAYLOAD\n-\n-0CB39 DATA DESCRIPTOR       08074B50 (134695760)\n-0CB3D CRC                   FCFC2855 (4244383829)\n-0CB41 Compressed Size       00006050 (24656)\n-0CB45 Uncompressed Size     00006050 (24656)\n-\n-0CB49 LOCAL HEADER #26      04034B50 (67324752)\n-0CB4D Extract Zip Spec      14 (20) '2.0'\n-0CB4E Extract OS            00 (0) 'MS-DOS'\n-0CB4F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0CB51 Compression Method    0000 (0) 'Stored'\n-0CB53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CB57 CRC                   00000000 (0)\n-0CB5B Compressed Size       00000000 (0)\n-0CB5F Uncompressed Size     00000000 (0)\n-0CB63 Filename Length       0039 (57)\n-0CB65 Extra Length          0009 (9)\n-0CB67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCB67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CBA0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CBA2   Length              0005 (5)\n-0CBA4   Flags               01 (1) 'Modification'\n-0CBA5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CBA9 PAYLOAD\n-\n-0D0D1 DATA DESCRIPTOR       08074B50 (134695760)\n-0D0D5 CRC                   F36E07A4 (4084074404)\n-0D0D9 Compressed Size       00000528 (1320)\n-0D0DD Uncompressed Size     00000528 (1320)\n-\n-0D0E1 LOCAL HEADER #27      04034B50 (67324752)\n-0D0E5 Extract Zip Spec      14 (20) '2.0'\n-0D0E6 Extract OS            00 (0) 'MS-DOS'\n-0D0E7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0D0E9 Compression Method    0000 (0) 'Stored'\n-0D0EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D0EF CRC                   00000000 (0)\n-0D0F3 Compressed Size       00000000 (0)\n-0D0F7 Uncompressed Size     00000000 (0)\n-0D0FB Filename Length       0037 (55)\n-0D0FD Extra Length          0009 (9)\n-0D0FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD0FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D136 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D138   Length              0005 (5)\n-0D13A   Flags               01 (1) 'Modification'\n-0D13B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D13F PAYLOAD\n-\n-0E917 DATA DESCRIPTOR       08074B50 (134695760)\n-0E91B CRC                   4E01C35D (1308738397)\n-0E91F Compressed Size       000017D8 (6104)\n-0E923 Uncompressed Size     000017D8 (6104)\n-\n-0E927 LOCAL HEADER #28      04034B50 (67324752)\n-0E92B Extract Zip Spec      14 (20) '2.0'\n-0E92C Extract OS            00 (0) 'MS-DOS'\n-0E92D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0E92F Compression Method    0000 (0) 'Stored'\n-0E931 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E935 CRC                   00000000 (0)\n-0E939 Compressed Size       00000000 (0)\n-0E93D Uncompressed Size     00000000 (0)\n-0E941 Filename Length       003B (59)\n-0E943 Extra Length          0009 (9)\n-0E945 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE945: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E980 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E982   Length              0005 (5)\n-0E984   Flags               01 (1) 'Modification'\n-0E985   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E989 PAYLOAD\n-\n-0F8BC DATA DESCRIPTOR       08074B50 (134695760)\n-0F8C0 CRC                   CCF50709 (3438610185)\n-0F8C4 Compressed Size       00000F33 (3891)\n-0F8C8 Uncompressed Size     00000F33 (3891)\n-\n-0F8CC LOCAL HEADER #29      04034B50 (67324752)\n-0F8D0 Extract Zip Spec      14 (20) '2.0'\n-0F8D1 Extract OS            00 (0) 'MS-DOS'\n-0F8D2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0F8D4 Compression Method    0000 (0) 'Stored'\n-0F8D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F8DA CRC                   00000000 (0)\n-0F8DE Compressed Size       00000000 (0)\n-0F8E2 Uncompressed Size     00000000 (0)\n-0F8E6 Filename Length       0038 (56)\n-0F8E8 Extra Length          0009 (9)\n-0F8EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF8EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F922 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F924   Length              0005 (5)\n-0F926   Flags               01 (1) 'Modification'\n-0F927   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F92B PAYLOAD\n-\n-11FBA DATA DESCRIPTOR       08074B50 (134695760)\n-11FBE CRC                   8C523252 (2354197074)\n-11FC2 Compressed Size       0000268F (9871)\n-11FC6 Uncompressed Size     0000268F (9871)\n-\n-11FCA LOCAL HEADER #30      04034B50 (67324752)\n-11FCE Extract Zip Spec      14 (20) '2.0'\n-11FCF Extract OS            00 (0) 'MS-DOS'\n-11FD0 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-11FD2 Compression Method    0000 (0) 'Stored'\n-11FD4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11FD8 CRC                   00000000 (0)\n-11FDC Compressed Size       00000000 (0)\n-11FE0 Uncompressed Size     00000000 (0)\n-11FE4 Filename Length       0034 (52)\n-11FE6 Extra Length          0009 (9)\n-11FE8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11FE8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1201C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1201E   Length              0005 (5)\n-12020   Flags               01 (1) 'Modification'\n-12021   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12025 PAYLOAD\n-\n-12691 DATA DESCRIPTOR       08074B50 (134695760)\n-12695 CRC                   CBF7FEA9 (3422027433)\n-12699 Compressed Size       0000066C (1644)\n-1269D Uncompressed Size     0000066C (1644)\n-\n-126A1 LOCAL HEADER #31      04034B50 (67324752)\n-126A5 Extract Zip Spec      14 (20) '2.0'\n-126A6 Extract OS            00 (0) 'MS-DOS'\n-126A7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-126A9 Compression Method    0000 (0) 'Stored'\n-126AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-126AF CRC                   00000000 (0)\n-126B3 Compressed Size       00000000 (0)\n-126B7 Uncompressed Size     00000000 (0)\n-126BB Filename Length       0035 (53)\n-126BD Extra Length          0009 (9)\n-126BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x126BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-126F4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-126F6   Length              0005 (5)\n-126F8   Flags               01 (1) 'Modification'\n-126F9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-126FD PAYLOAD\n-\n-13777 DATA DESCRIPTOR       08074B50 (134695760)\n-1377B CRC                   FD7FF5E7 (4253021671)\n-1377F Compressed Size       0000107A (4218)\n-13783 Uncompressed Size     0000107A (4218)\n-\n-13787 LOCAL HEADER #32      04034B50 (67324752)\n-1378B Extract Zip Spec      14 (20) '2.0'\n-1378C Extract OS            00 (0) 'MS-DOS'\n-1378D General Purpose Flag  0000 (0)\n-1378F Compression Method    0000 (0) 'Stored'\n-13791 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13795 CRC                   00000000 (0)\n-13799 Compressed Size       00000000 (0)\n-1379D Uncompressed Size     00000000 (0)\n-137A1 Filename Length       0029 (41)\n-137A3 Extra Length          0009 (9)\n-137A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x137A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-137CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-137D0   Length              0005 (5)\n-137D2   Flags               01 (1) 'Modification'\n-137D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-137D7 LOCAL HEADER #33      04034B50 (67324752)\n-137DB Extract Zip Spec      14 (20) '2.0'\n-137DC Extract OS            00 (0) 'MS-DOS'\n-137DD General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-137DF Compression Method    0000 (0) 'Stored'\n-137E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-137E5 CRC                   00000000 (0)\n-137E9 Compressed Size       00000000 (0)\n-137ED Uncompressed Size     00000000 (0)\n-137F1 Filename Length       0043 (67)\n-137F3 Extra Length          0009 (9)\n-137F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x137F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13838 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1383A   Length              0005 (5)\n-1383C   Flags               01 (1) 'Modification'\n-1383D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-13841 PAYLOAD\n-\n-1487F DATA DESCRIPTOR       08074B50 (134695760)\n-14883 CRC                   6A1A9325 (1780126501)\n-14887 Compressed Size       0000103E (4158)\n-1488B Uncompressed Size     0000103E (4158)\n-\n-1488F LOCAL HEADER #34      04034B50 (67324752)\n-14893 Extract Zip Spec      14 (20) '2.0'\n-14894 Extract OS            00 (0) 'MS-DOS'\n-14895 General Purpose Flag  0000 (0)\n-14897 Compression Method    0000 (0) 'Stored'\n-14899 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1489D CRC                   00000000 (0)\n-148A1 Compressed Size       00000000 (0)\n-148A5 Uncompressed Size     00000000 (0)\n-148A9 Filename Length       0028 (40)\n-148AB Extra Length          0009 (9)\n-148AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x148AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-148D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-148D7   Length              0005 (5)\n-148D9   Flags               01 (1) 'Modification'\n-148DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-148DE LOCAL HEADER #35      04034B50 (67324752)\n-148E2 Extract Zip Spec      14 (20) '2.0'\n-148E3 Extract OS            00 (0) 'MS-DOS'\n-148E4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-148E6 Compression Method    0000 (0) 'Stored'\n-148E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-148EC CRC                   00000000 (0)\n-148F0 Compressed Size       00000000 (0)\n-148F4 Uncompressed Size     00000000 (0)\n-148F8 Filename Length       003F (63)\n-148FA Extra Length          0009 (9)\n-148FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x148FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1493B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1493D   Length              0005 (5)\n-1493F   Flags               01 (1) 'Modification'\n-14940   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-14944 PAYLOAD\n-\n-15295 DATA DESCRIPTOR       08074B50 (134695760)\n-15299 CRC                   021D9C13 (35494931)\n-1529D Compressed Size       00000951 (2385)\n-152A1 Uncompressed Size     00000951 (2385)\n-\n-152A5 LOCAL HEADER #36      04034B50 (67324752)\n-152A9 Extract Zip Spec      14 (20) '2.0'\n-152AA Extract OS            00 (0) 'MS-DOS'\n-152AB General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-152AD Compression Method    0000 (0) 'Stored'\n-152AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-152B3 CRC                   00000000 (0)\n-152B7 Compressed Size       00000000 (0)\n-152BB Uncompressed Size     00000000 (0)\n-152BF Filename Length       004E (78)\n-152C1 Extra Length          0009 (9)\n-152C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x152C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15311 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15313   Length              0005 (5)\n-15315   Flags               01 (1) 'Modification'\n-15316   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1531A PAYLOAD\n-\n-15F0B DATA DESCRIPTOR       08074B50 (134695760)\n-15F0F CRC                   48F808F8 (1224214776)\n-15F13 Compressed Size       00000BF1 (3057)\n-15F17 Uncompressed Size     00000BF1 (3057)\n-\n-15F1B CENTRAL HEADER #1     02014B50 (33639248)\n-15F1F Created Zip Spec      14 (20) '2.0'\n-15F20 Created OS            00 (0) 'MS-DOS'\n-15F21 Extract Zip Spec      14 (20) '2.0'\n-15F22 Extract OS            00 (0) 'MS-DOS'\n-15F23 General Purpose Flag  0000 (0)\n-15F25 Compression Method    0000 (0) 'Stored'\n-15F27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15F2B CRC                   00000000 (0)\n-15F2F Compressed Size       00000000 (0)\n-15F33 Uncompressed Size     00000000 (0)\n-15F37 Filename Length       0009 (9)\n-15F39 Extra Length          0009 (9)\n-15F3B Comment Length        0000 (0)\n-15F3D Disk Start            0000 (0)\n-15F3F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-15F41 Ext File Attributes   00000000 (0)\n-15F45 Local Header Offset   00000000 (0)\n-15F49 Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x15F49: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-15F52 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15F54   Length              0005 (5)\n-15F56   Flags               01 (1) 'Modification'\n-15F57   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-15F5B CENTRAL HEADER #2     02014B50 (33639248)\n-15F5F Created Zip Spec      14 (20) '2.0'\n-15F60 Created OS            00 (0) 'MS-DOS'\n-15F61 Extract Zip Spec      14 (20) '2.0'\n-15F62 Extract OS            00 (0) 'MS-DOS'\n-15F63 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-15F65 Compression Method    0000 (0) 'Stored'\n-15F67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15F6B CRC                   A6C67FA0 (2798026656)\n-15F6F Compressed Size       00001817 (6167)\n-15F73 Uncompressed Size     00001817 (6167)\n-15F77 Filename Length       0015 (21)\n-15F79 Extra Length          0009 (9)\n-15F7B Comment Length        0000 (0)\n-15F7D Disk Start            0000 (0)\n-15F7F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-15F81 Ext File Attributes   00000000 (0)\n-15F85 Local Header Offset   00000030 (48)\n-15F89 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15F89: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15F9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15FA0   Length              0005 (5)\n-15FA2   Flags               01 (1) 'Modification'\n-15FA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-15FA7 CENTRAL HEADER #3     02014B50 (33639248)\n-15FAB Created Zip Spec      14 (20) '2.0'\n-15FAC Created OS            00 (0) 'MS-DOS'\n-15FAD Extract Zip Spec      14 (20) '2.0'\n-15FAE Extract OS            00 (0) 'MS-DOS'\n-15FAF General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-15FB1 Compression Method    0000 (0) 'Stored'\n-15FB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15FB7 CRC                   86E2B4B4 (2263004340)\n-15FBB Compressed Size       00002C5E (11358)\n-15FBF Uncompressed Size     00002C5E (11358)\n-15FC3 Filename Length       0010 (16)\n-15FC5 Extra Length          0009 (9)\n-15FC7 Comment Length        0000 (0)\n-15FC9 Disk Start            0000 (0)\n-15FCB Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-15FCD Ext File Attributes   00000000 (0)\n-15FD1 Local Header Offset   00001893 (6291)\n-15FD5 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15FD5: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15FE5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15FE7   Length              0005 (5)\n-15FE9   Flags               01 (1) 'Modification'\n-15FEA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-15FEE CENTRAL HEADER #4     02014B50 (33639248)\n-15FF2 Created Zip Spec      14 (20) '2.0'\n-15FF3 Created OS            00 (0) 'MS-DOS'\n-15FF4 Extract Zip Spec      14 (20) '2.0'\n-15FF5 Extract OS            00 (0) 'MS-DOS'\n-15FF6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-15FF8 Compression Method    0000 (0) 'Stored'\n-15FFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15FFE CRC                   EE027FB2 (3993141170)\n-16002 Compressed Size       00000019 (25)\n-16006 Uncompressed Size     00000019 (25)\n-1600A Filename Length       0014 (20)\n-1600C Extra Length          0009 (9)\n-1600E Comment Length        0000 (0)\n-16010 Disk Start            0000 (0)\n-16012 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16014 Ext File Attributes   00000000 (0)\n-16018 Local Header Offset   00004538 (17720)\n-1601C Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1601C: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16030 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16032   Length              0005 (5)\n-16034   Flags               01 (1) 'Modification'\n-16035   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16039 CENTRAL HEADER #5     02014B50 (33639248)\n-1603D Created Zip Spec      14 (20) '2.0'\n-1603E Created OS            00 (0) 'MS-DOS'\n-1603F Extract Zip Spec      14 (20) '2.0'\n-16040 Extract OS            00 (0) 'MS-DOS'\n-16041 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-16043 Compression Method    0000 (0) 'Stored'\n-16045 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16049 CRC                   75A33247 (1973629511)\n-1604D Compressed Size       000000AD (173)\n-16051 Uncompressed Size     000000AD (173)\n-16055 Filename Length       000F (15)\n-16057 Extra Length          0009 (9)\n-16059 Comment Length        0000 (0)\n-1605B Disk Start            0000 (0)\n-1605D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-1605F Ext File Attributes   00000000 (0)\n-16063 Local Header Offset   0000459C (17820)\n-16067 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16067: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16076 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16078   Length              0005 (5)\n-1607A   Flags               01 (1) 'Modification'\n-1607B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1607F CENTRAL HEADER #6     02014B50 (33639248)\n-16083 Created Zip Spec      14 (20) '2.0'\n-16084 Created OS            00 (0) 'MS-DOS'\n-16085 Extract Zip Spec      14 (20) '2.0'\n-16086 Extract OS            00 (0) 'MS-DOS'\n-16087 General Purpose Flag  0000 (0)\n-16089 Compression Method    0000 (0) 'Stored'\n-1608B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1608F CRC                   00000000 (0)\n-16093 Compressed Size       00000000 (0)\n-16097 Uncompressed Size     00000000 (0)\n-1609B Filename Length       000F (15)\n-1609D Extra Length          0009 (9)\n-1609F Comment Length        0000 (0)\n-160A1 Disk Start            0000 (0)\n-160A3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-160A5 Ext File Attributes   00000000 (0)\n-160A9 Local Header Offset   0000468F (18063)\n-160AD Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x160AD: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-160BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-160BE   Length              0005 (5)\n-160C0   Flags               01 (1) 'Modification'\n-160C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-160C5 CENTRAL HEADER #7     02014B50 (33639248)\n-160C9 Created Zip Spec      14 (20) '2.0'\n-160CA Created OS            00 (0) 'MS-DOS'\n-160CB Extract Zip Spec      14 (20) '2.0'\n-160CC Extract OS            00 (0) 'MS-DOS'\n-160CD General Purpose Flag  0000 (0)\n-160CF Compression Method    0000 (0) 'Stored'\n-160D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-160D5 CRC                   00000000 (0)\n-160D9 Compressed Size       00000000 (0)\n-160DD Uncompressed Size     00000000 (0)\n-160E1 Filename Length       0018 (24)\n-160E3 Extra Length          0009 (9)\n-160E5 Comment Length        0000 (0)\n-160E7 Disk Start            0000 (0)\n-160E9 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-160EB Ext File Attributes   00000000 (0)\n-160EF Local Header Offset   000046C5 (18117)\n-160F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x160F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1610B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1610D   Length              0005 (5)\n-1610F   Flags               01 (1) 'Modification'\n-16110   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16114 CENTRAL HEADER #8     02014B50 (33639248)\n-16118 Created Zip Spec      14 (20) '2.0'\n-16119 Created OS            00 (0) 'MS-DOS'\n-1611A Extract Zip Spec      14 (20) '2.0'\n-1611B Extract OS            00 (0) 'MS-DOS'\n-1611C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1611E Compression Method    0000 (0) 'Stored'\n-16120 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16124 CRC                   A41E0996 (2753431958)\n-16128 Compressed Size       00000037 (55)\n-1612C Uncompressed Size     00000037 (55)\n-16130 Filename Length       0038 (56)\n-16132 Extra Length          0009 (9)\n-16134 Comment Length        0000 (0)\n-16136 Disk Start            0000 (0)\n-16138 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-1613A Ext File Attributes   00000000 (0)\n-1613E Local Header Offset   00004704 (18180)\n-16142 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16142: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1617A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1617C   Length              0005 (5)\n-1617E   Flags               01 (1) 'Modification'\n-1617F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16183 CENTRAL HEADER #9     02014B50 (33639248)\n-16187 Created Zip Spec      14 (20) '2.0'\n-16188 Created OS            00 (0) 'MS-DOS'\n-16189 Extract Zip Spec      14 (20) '2.0'\n-1618A Extract OS            00 (0) 'MS-DOS'\n-1618B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1618D Compression Method    0000 (0) 'Stored'\n-1618F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16193 CRC                   484E8E33 (1213107763)\n-16197 Compressed Size       0000003A (58)\n-1619B Uncompressed Size     0000003A (58)\n-1619F Filename Length       0035 (53)\n-161A1 Extra Length          0009 (9)\n-161A3 Comment Length        0000 (0)\n-161A5 Disk Start            0000 (0)\n-161A7 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-161A9 Ext File Attributes   00000000 (0)\n-161AD Local Header Offset   000047AA (18346)\n-161B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x161B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-161E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-161E8   Length              0005 (5)\n-161EA   Flags               01 (1) 'Modification'\n-161EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-161EF CENTRAL HEADER #10    02014B50 (33639248)\n-161F3 Created Zip Spec      14 (20) '2.0'\n-161F4 Created OS            00 (0) 'MS-DOS'\n-161F5 Extract Zip Spec      14 (20) '2.0'\n-161F6 Extract OS            00 (0) 'MS-DOS'\n-161F7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-161F9 Compression Method    0000 (0) 'Stored'\n-161FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-161FF CRC                   78C43CAA (2026126506)\n-16203 Compressed Size       00000088 (136)\n-16207 Uncompressed Size     00000088 (136)\n-1620B Filename Length       004F (79)\n-1620D Extra Length          0009 (9)\n-1620F Comment Length        0000 (0)\n-16211 Disk Start            0000 (0)\n-16213 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16215 Ext File Attributes   00000000 (0)\n-16219 Local Header Offset   00004850 (18512)\n-1621D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1621D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1626C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1626E   Length              0005 (5)\n-16270   Flags               01 (1) 'Modification'\n-16271   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16275 CENTRAL HEADER #11    02014B50 (33639248)\n-16279 Created Zip Spec      14 (20) '2.0'\n-1627A Created OS            00 (0) 'MS-DOS'\n-1627B Extract Zip Spec      14 (20) '2.0'\n-1627C Extract OS            00 (0) 'MS-DOS'\n-1627D General Purpose Flag  0000 (0)\n-1627F Compression Method    0000 (0) 'Stored'\n-16281 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16285 CRC                   00000000 (0)\n-16289 Compressed Size       00000000 (0)\n-1628D Uncompressed Size     00000000 (0)\n-16291 Filename Length       000F (15)\n-16293 Extra Length          0009 (9)\n-16295 Comment Length        0000 (0)\n-16297 Disk Start            0000 (0)\n-16299 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-1629B Ext File Attributes   00000000 (0)\n-1629F Local Header Offset   0000495E (18782)\n-162A3 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x162A3: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-162B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-162B4   Length              0005 (5)\n-162B6   Flags               01 (1) 'Modification'\n-162B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-162BB CENTRAL HEADER #12    02014B50 (33639248)\n-162BF Created Zip Spec      14 (20) '2.0'\n-162C0 Created OS            00 (0) 'MS-DOS'\n-162C1 Extract Zip Spec      14 (20) '2.0'\n-162C2 Extract OS            00 (0) 'MS-DOS'\n-162C3 General Purpose Flag  0000 (0)\n-162C5 Compression Method    0000 (0) 'Stored'\n-162C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-162CB CRC                   00000000 (0)\n-162CF Compressed Size       00000000 (0)\n-162D3 Uncompressed Size     00000000 (0)\n-162D7 Filename Length       0020 (32)\n-162D9 Extra Length          0009 (9)\n-162DB Comment Length        0000 (0)\n-162DD Disk Start            0000 (0)\n-162DF Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-162E1 Ext File Attributes   00000000 (0)\n-162E5 Local Header Offset   00004994 (18836)\n-162E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x162E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16309 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1630B   Length              0005 (5)\n-1630D   Flags               01 (1) 'Modification'\n-1630E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16312 CENTRAL HEADER #13    02014B50 (33639248)\n-16316 Created Zip Spec      14 (20) '2.0'\n-16317 Created OS            00 (0) 'MS-DOS'\n-16318 Extract Zip Spec      14 (20) '2.0'\n-16319 Extract OS            00 (0) 'MS-DOS'\n-1631A General Purpose Flag  0000 (0)\n-1631C Compression Method    0000 (0) 'Stored'\n-1631E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16322 CRC                   00000000 (0)\n-16326 Compressed Size       00000000 (0)\n-1632A Uncompressed Size     00000000 (0)\n-1632E Filename Length       0031 (49)\n-16330 Extra Length          0009 (9)\n-16332 Comment Length        0000 (0)\n-16334 Disk Start            0000 (0)\n-16336 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16338 Ext File Attributes   00000000 (0)\n-1633C Local Header Offset   000049DB (18907)\n-16340 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16340: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16371 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16373   Length              0005 (5)\n-16375   Flags               01 (1) 'Modification'\n-16376   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1637A CENTRAL HEADER #14    02014B50 (33639248)\n-1637E Created Zip Spec      14 (20) '2.0'\n-1637F Created OS            00 (0) 'MS-DOS'\n-16380 Extract Zip Spec      14 (20) '2.0'\n-16381 Extract OS            00 (0) 'MS-DOS'\n-16382 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-16384 Compression Method    0000 (0) 'Stored'\n-16386 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1638A CRC                   00000000 (0)\n-1638E Compressed Size       00000000 (0)\n-16392 Uncompressed Size     00000000 (0)\n-16396 Filename Length       003F (63)\n-16398 Extra Length          0009 (9)\n-1639A Comment Length        0000 (0)\n-1639C Disk Start            0000 (0)\n-1639E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-163A0 Ext File Attributes   00000000 (0)\n-163A4 Local Header Offset   00004A33 (18995)\n-163A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x163A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-163E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-163E9   Length              0005 (5)\n-163EB   Flags               01 (1) 'Modification'\n-163EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-163F0 CENTRAL HEADER #15    02014B50 (33639248)\n-163F4 Created Zip Spec      14 (20) '2.0'\n-163F5 Created OS            00 (0) 'MS-DOS'\n-163F6 Extract Zip Spec      14 (20) '2.0'\n-163F7 Extract OS            00 (0) 'MS-DOS'\n-163F8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-163FA Compression Method    0000 (0) 'Stored'\n-163FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16400 CRC                   2B7AF38C (729478028)\n-16404 Compressed Size       00000C82 (3202)\n-16408 Uncompressed Size     00000C82 (3202)\n-1640C Filename Length       0038 (56)\n-1640E Extra Length          0009 (9)\n-16410 Comment Length        0000 (0)\n-16412 Disk Start            0000 (0)\n-16414 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16416 Ext File Attributes   00000000 (0)\n-1641A Local Header Offset   00004AA9 (19113)\n-1641E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1641E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16456 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16458   Length              0005 (5)\n-1645A   Flags               01 (1) 'Modification'\n-1645B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1645F CENTRAL HEADER #16    02014B50 (33639248)\n-16463 Created Zip Spec      14 (20) '2.0'\n-16464 Created OS            00 (0) 'MS-DOS'\n-16465 Extract Zip Spec      14 (20) '2.0'\n-16466 Extract OS            00 (0) 'MS-DOS'\n-16467 General Purpose Flag  0000 (0)\n-16469 Compression Method    0000 (0) 'Stored'\n-1646B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1646F CRC                   00000000 (0)\n-16473 Compressed Size       00000000 (0)\n-16477 Uncompressed Size     00000000 (0)\n-1647B Filename Length       0004 (4)\n-1647D Extra Length          0009 (9)\n-1647F Comment Length        0000 (0)\n-16481 Disk Start            0000 (0)\n-16483 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16485 Ext File Attributes   00000000 (0)\n-16489 Local Header Offset   0000579A (22426)\n-1648D Filename              'XXXX'\n-#\n-# WARNING: Offset 0x1648D: Filename 'XXXX'\n-#          Zero length filename\n-#\n-16491 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16493   Length              0005 (5)\n-16495   Flags               01 (1) 'Modification'\n-16496   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1649A CENTRAL HEADER #17    02014B50 (33639248)\n-1649E Created Zip Spec      14 (20) '2.0'\n-1649F Created OS            00 (0) 'MS-DOS'\n-164A0 Extract Zip Spec      14 (20) '2.0'\n-164A1 Extract OS            00 (0) 'MS-DOS'\n-164A2 General Purpose Flag  0000 (0)\n-164A4 Compression Method    0000 (0) 'Stored'\n-164A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-164AA CRC                   00000000 (0)\n-164AE Compressed Size       00000000 (0)\n-164B2 Uncompressed Size     00000000 (0)\n-164B6 Filename Length       000B (11)\n-164B8 Extra Length          0009 (9)\n-164BA Comment Length        0000 (0)\n-164BC Disk Start            0000 (0)\n-164BE Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-164C0 Ext File Attributes   00000000 (0)\n-164C4 Local Header Offset   000057C5 (22469)\n-164C8 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x164C8: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-164D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-164D5   Length              0005 (5)\n-164D7   Flags               01 (1) 'Modification'\n-164D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-164DC CENTRAL HEADER #18    02014B50 (33639248)\n-164E0 Created Zip Spec      14 (20) '2.0'\n-164E1 Created OS            00 (0) 'MS-DOS'\n-164E2 Extract Zip Spec      14 (20) '2.0'\n-164E3 Extract OS            00 (0) 'MS-DOS'\n-164E4 General Purpose Flag  0000 (0)\n-164E6 Compression Method    0000 (0) 'Stored'\n-164E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-164EC CRC                   00000000 (0)\n-164F0 Compressed Size       00000000 (0)\n-164F4 Uncompressed Size     00000000 (0)\n-164F8 Filename Length       0011 (17)\n-164FA Extra Length          0009 (9)\n-164FC Comment Length        0000 (0)\n-164FE Disk Start            0000 (0)\n-16500 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16502 Ext File Attributes   00000000 (0)\n-16506 Local Header Offset   000057F7 (22519)\n-1650A Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1650A: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1651B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1651D   Length              0005 (5)\n-1651F   Flags               01 (1) 'Modification'\n-16520   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16524 CENTRAL HEADER #19    02014B50 (33639248)\n-16528 Created Zip Spec      14 (20) '2.0'\n-16529 Created OS            00 (0) 'MS-DOS'\n-1652A Extract Zip Spec      14 (20) '2.0'\n-1652B Extract OS            00 (0) 'MS-DOS'\n-1652C General Purpose Flag  0000 (0)\n-1652E Compression Method    0000 (0) 'Stored'\n-16530 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16534 CRC                   00000000 (0)\n-16538 Compressed Size       00000000 (0)\n-1653C Uncompressed Size     00000000 (0)\n-16540 Filename Length       0015 (21)\n-16542 Extra Length          0009 (9)\n-16544 Comment Length        0000 (0)\n-16546 Disk Start            0000 (0)\n-16548 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-1654A Ext File Attributes   00000000 (0)\n-1654E Local Header Offset   0000582F (22575)\n-16552 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16552: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16567 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16569   Length              0005 (5)\n-1656B   Flags               01 (1) 'Modification'\n-1656C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16570 CENTRAL HEADER #20    02014B50 (33639248)\n-16574 Created Zip Spec      14 (20) '2.0'\n-16575 Created OS            00 (0) 'MS-DOS'\n-16576 Extract Zip Spec      14 (20) '2.0'\n-16577 Extract OS            00 (0) 'MS-DOS'\n-16578 General Purpose Flag  0000 (0)\n-1657A Compression Method    0000 (0) 'Stored'\n-1657C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16580 CRC                   00000000 (0)\n-16584 Compressed Size       00000000 (0)\n-16588 Uncompressed Size     00000000 (0)\n-1658C Filename Length       001E (30)\n-1658E Extra Length          0009 (9)\n-16590 Comment Length        0000 (0)\n-16592 Disk Start            0000 (0)\n-16594 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16596 Ext File Attributes   00000000 (0)\n-1659A Local Header Offset   0000586B (22635)\n-1659E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1659E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-165BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-165BE   Length              0005 (5)\n-165C0   Flags               01 (1) 'Modification'\n-165C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-165C5 CENTRAL HEADER #21    02014B50 (33639248)\n-165C9 Created Zip Spec      14 (20) '2.0'\n-165CA Created OS            00 (0) 'MS-DOS'\n-165CB Extract Zip Spec      14 (20) '2.0'\n-165CC Extract OS            00 (0) 'MS-DOS'\n-165CD General Purpose Flag  0000 (0)\n-165CF Compression Method    0000 (0) 'Stored'\n-165D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-165D5 CRC                   00000000 (0)\n-165D9 Compressed Size       00000000 (0)\n-165DD Uncompressed Size     00000000 (0)\n-165E1 Filename Length       0025 (37)\n-165E3 Extra Length          0009 (9)\n-165E5 Comment Length        0000 (0)\n-165E7 Disk Start            0000 (0)\n-165E9 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-165EB Ext File Attributes   00000000 (0)\n-165EF Local Header Offset   000058B0 (22704)\n-165F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x165F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16618 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1661A   Length              0005 (5)\n-1661C   Flags               01 (1) 'Modification'\n-1661D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16621 CENTRAL HEADER #22    02014B50 (33639248)\n-16625 Created Zip Spec      14 (20) '2.0'\n-16626 Created OS            00 (0) 'MS-DOS'\n-16627 Extract Zip Spec      14 (20) '2.0'\n-16628 Extract OS            00 (0) 'MS-DOS'\n-16629 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1662B Compression Method    0000 (0) 'Stored'\n-1662D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16631 CRC                   338329BB (864233915)\n-16635 Compressed Size       000004C3 (1219)\n-16639 Uncompressed Size     000004C3 (1219)\n-1663D Filename Length       003C (60)\n-1663F Extra Length          0009 (9)\n-16641 Comment Length        0000 (0)\n-16643 Disk Start            0000 (0)\n-16645 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16647 Ext File Attributes   00000000 (0)\n-1664B Local Header Offset   000058FC (22780)\n-1664F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1664F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1668B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1668D   Length              0005 (5)\n-1668F   Flags               01 (1) 'Modification'\n-16690   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16694 CENTRAL HEADER #23    02014B50 (33639248)\n-16698 Created Zip Spec      14 (20) '2.0'\n-16699 Created OS            00 (0) 'MS-DOS'\n-1669A Extract Zip Spec      14 (20) '2.0'\n-1669B Extract OS            00 (0) 'MS-DOS'\n-1669C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1669E Compression Method    0000 (0) 'Stored'\n-166A0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-166A4 CRC                   3B13030C (991101708)\n-166A8 Compressed Size       0000059C (1436)\n-166AC Uncompressed Size     0000059C (1436)\n-166B0 Filename Length       0041 (65)\n-166B2 Extra Length          0009 (9)\n-166B4 Comment Length        0000 (0)\n-166B6 Disk Start            0000 (0)\n-166B8 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-166BA Ext File Attributes   00000000 (0)\n-166BE Local Header Offset   00005E32 (24114)\n-166C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+05737 DATA DESCRIPTOR       08074B50 (134695760)\n+0573B CRC                   FBA32B90 (4221774736)\n+0573F Compressed Size       00000C2F (3119)\n+05743 Uncompressed Size     00000C2F (3119)\n+\n+05747 LOCAL HEADER #16      04034B50 (67324752)\n+0574B Extract Zip Spec      14 (20) '2.0'\n+0574C Extract OS            00 (0) 'MS-DOS'\n+0574D General Purpose Flag  0000 (0)\n+0574F Compression Method    0000 (0) 'Stored'\n+05751 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05755 CRC                   00000000 (0)\n+05759 Compressed Size       00000000 (0)\n+0575D Uncompressed Size     00000000 (0)\n+05761 Filename Length       0004 (4)\n+05763 Extra Length          0009 (9)\n+05765 Filename              'XXXX'\n+#\n+# WARNING: Offset 0x5765: Filename 'XXXX'\n+#          Zero length filename\n+#\n+05769 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0576B   Length              0005 (5)\n+0576D   Flags               01 (1) 'Modification'\n+0576E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05772 LOCAL HEADER #17      04034B50 (67324752)\n+05776 Extract Zip Spec      14 (20) '2.0'\n+05777 Extract OS            00 (0) 'MS-DOS'\n+05778 General Purpose Flag  0000 (0)\n+0577A Compression Method    0000 (0) 'Stored'\n+0577C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05780 CRC                   00000000 (0)\n+05784 Compressed Size       00000000 (0)\n+05788 Uncompressed Size     00000000 (0)\n+0578C Filename Length       000B (11)\n+0578E Extra Length          0009 (9)\n+05790 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5790: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0579B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0579D   Length              0005 (5)\n+0579F   Flags               01 (1) 'Modification'\n+057A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+057A4 LOCAL HEADER #18      04034B50 (67324752)\n+057A8 Extract Zip Spec      14 (20) '2.0'\n+057A9 Extract OS            00 (0) 'MS-DOS'\n+057AA General Purpose Flag  0000 (0)\n+057AC Compression Method    0000 (0) 'Stored'\n+057AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+057B2 CRC                   00000000 (0)\n+057B6 Compressed Size       00000000 (0)\n+057BA Uncompressed Size     00000000 (0)\n+057BE Filename Length       0011 (17)\n+057C0 Extra Length          0009 (9)\n+057C2 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x57C2: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+057D3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+057D5   Length              0005 (5)\n+057D7   Flags               01 (1) 'Modification'\n+057D8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+057DC LOCAL HEADER #19      04034B50 (67324752)\n+057E0 Extract Zip Spec      14 (20) '2.0'\n+057E1 Extract OS            00 (0) 'MS-DOS'\n+057E2 General Purpose Flag  0000 (0)\n+057E4 Compression Method    0000 (0) 'Stored'\n+057E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+057EA CRC                   00000000 (0)\n+057EE Compressed Size       00000000 (0)\n+057F2 Uncompressed Size     00000000 (0)\n+057F6 Filename Length       0015 (21)\n+057F8 Extra Length          0009 (9)\n+057FA Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x57FA: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0580F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05811   Length              0005 (5)\n+05813   Flags               01 (1) 'Modification'\n+05814   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05818 LOCAL HEADER #20      04034B50 (67324752)\n+0581C Extract Zip Spec      14 (20) '2.0'\n+0581D Extract OS            00 (0) 'MS-DOS'\n+0581E General Purpose Flag  0000 (0)\n+05820 Compression Method    0000 (0) 'Stored'\n+05822 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05826 CRC                   00000000 (0)\n+0582A Compressed Size       00000000 (0)\n+0582E Uncompressed Size     00000000 (0)\n+05832 Filename Length       001E (30)\n+05834 Extra Length          0009 (9)\n+05836 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5836: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05854 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05856   Length              0005 (5)\n+05858   Flags               01 (1) 'Modification'\n+05859   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0585D LOCAL HEADER #21      04034B50 (67324752)\n+05861 Extract Zip Spec      14 (20) '2.0'\n+05862 Extract OS            00 (0) 'MS-DOS'\n+05863 General Purpose Flag  0000 (0)\n+05865 Compression Method    0000 (0) 'Stored'\n+05867 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0586B CRC                   00000000 (0)\n+0586F Compressed Size       00000000 (0)\n+05873 Uncompressed Size     00000000 (0)\n+05877 Filename Length       0025 (37)\n+05879 Extra Length          0009 (9)\n+0587B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x587B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+058A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+058A2   Length              0005 (5)\n+058A4   Flags               01 (1) 'Modification'\n+058A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+058A9 LOCAL HEADER #22      04034B50 (67324752)\n+058AD Extract Zip Spec      14 (20) '2.0'\n+058AE Extract OS            00 (0) 'MS-DOS'\n+058AF General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+058B1 Compression Method    0000 (0) 'Stored'\n+058B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+058B7 CRC                   00000000 (0)\n+058BB Compressed Size       00000000 (0)\n+058BF Uncompressed Size     00000000 (0)\n+058C3 Filename Length       003C (60)\n+058C5 Extra Length          0009 (9)\n+058C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x58C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05903 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05905   Length              0005 (5)\n+05907   Flags               01 (1) 'Modification'\n+05908   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0590C PAYLOAD\n+\n+05DEE DATA DESCRIPTOR       08074B50 (134695760)\n+05DF2 CRC                   63A56C0E (1671785486)\n+05DF6 Compressed Size       000004E2 (1250)\n+05DFA Uncompressed Size     000004E2 (1250)\n+\n+05DFE LOCAL HEADER #23      04034B50 (67324752)\n+05E02 Extract Zip Spec      14 (20) '2.0'\n+05E03 Extract OS            00 (0) 'MS-DOS'\n+05E04 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+05E06 Compression Method    0000 (0) 'Stored'\n+05E08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05E0C CRC                   00000000 (0)\n+05E10 Compressed Size       00000000 (0)\n+05E14 Uncompressed Size     00000000 (0)\n+05E18 Filename Length       0041 (65)\n+05E1A Extra Length          0009 (9)\n+05E1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5E1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05E5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05E5F   Length              0005 (5)\n+05E61   Flags               01 (1) 'Modification'\n+05E62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05E66 PAYLOAD\n+\n+06426 DATA DESCRIPTOR       08074B50 (134695760)\n+0642A CRC                   E0FB0689 (3774547593)\n+0642E Compressed Size       000005C0 (1472)\n+06432 Uncompressed Size     000005C0 (1472)\n+\n+06436 LOCAL HEADER #24      04034B50 (67324752)\n+0643A Extract Zip Spec      14 (20) '2.0'\n+0643B Extract OS            00 (0) 'MS-DOS'\n+0643C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0643E Compression Method    0000 (0) 'Stored'\n+06440 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06444 CRC                   00000000 (0)\n+06448 Compressed Size       00000000 (0)\n+0644C Uncompressed Size     00000000 (0)\n+06450 Filename Length       0042 (66)\n+06452 Extra Length          0009 (9)\n+06454 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6454: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06496 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06498   Length              0005 (5)\n+0649A   Flags               01 (1) 'Modification'\n+0649B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0649F PAYLOAD\n+\n+06A6D DATA DESCRIPTOR       08074B50 (134695760)\n+06A71 CRC                   45D210E4 (1171394788)\n+06A75 Compressed Size       000005CE (1486)\n+06A79 Uncompressed Size     000005CE (1486)\n+\n+06A7D LOCAL HEADER #25      04034B50 (67324752)\n+06A81 Extract Zip Spec      14 (20) '2.0'\n+06A82 Extract OS            00 (0) 'MS-DOS'\n+06A83 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+06A85 Compression Method    0000 (0) 'Stored'\n+06A87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06A8B CRC                   00000000 (0)\n+06A8F Compressed Size       00000000 (0)\n+06A93 Uncompressed Size     00000000 (0)\n+06A97 Filename Length       0035 (53)\n+06A99 Extra Length          0009 (9)\n+06A9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6A9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06AD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06AD2   Length              0005 (5)\n+06AD4   Flags               01 (1) 'Modification'\n+06AD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+06AD9 PAYLOAD\n+\n+0CDE3 DATA DESCRIPTOR       08074B50 (134695760)\n+0CDE7 CRC                   F30965C2 (4077479362)\n+0CDEB Compressed Size       0000630A (25354)\n+0CDEF Uncompressed Size     0000630A (25354)\n+\n+0CDF3 LOCAL HEADER #26      04034B50 (67324752)\n+0CDF7 Extract Zip Spec      14 (20) '2.0'\n+0CDF8 Extract OS            00 (0) 'MS-DOS'\n+0CDF9 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0CDFB Compression Method    0000 (0) 'Stored'\n+0CDFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CE01 CRC                   00000000 (0)\n+0CE05 Compressed Size       00000000 (0)\n+0CE09 Uncompressed Size     00000000 (0)\n+0CE0D Filename Length       0039 (57)\n+0CE0F Extra Length          0009 (9)\n+0CE11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCE11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CE4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CE4C   Length              0005 (5)\n+0CE4E   Flags               01 (1) 'Modification'\n+0CE4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CE53 PAYLOAD\n+\n+0D39B DATA DESCRIPTOR       08074B50 (134695760)\n+0D39F CRC                   046733D7 (73872343)\n+0D3A3 Compressed Size       00000548 (1352)\n+0D3A7 Uncompressed Size     00000548 (1352)\n+\n+0D3AB LOCAL HEADER #27      04034B50 (67324752)\n+0D3AF Extract Zip Spec      14 (20) '2.0'\n+0D3B0 Extract OS            00 (0) 'MS-DOS'\n+0D3B1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0D3B3 Compression Method    0000 (0) 'Stored'\n+0D3B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D3B9 CRC                   00000000 (0)\n+0D3BD Compressed Size       00000000 (0)\n+0D3C1 Uncompressed Size     00000000 (0)\n+0D3C5 Filename Length       0037 (55)\n+0D3C7 Extra Length          0009 (9)\n+0D3C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD3C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D400 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D402   Length              0005 (5)\n+0D404   Flags               01 (1) 'Modification'\n+0D405   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D409 PAYLOAD\n+\n+0EC8C DATA DESCRIPTOR       08074B50 (134695760)\n+0EC90 CRC                   0C743F4B (208944971)\n+0EC94 Compressed Size       00001883 (6275)\n+0EC98 Uncompressed Size     00001883 (6275)\n+\n+0EC9C LOCAL HEADER #28      04034B50 (67324752)\n+0ECA0 Extract Zip Spec      14 (20) '2.0'\n+0ECA1 Extract OS            00 (0) 'MS-DOS'\n+0ECA2 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0ECA4 Compression Method    0000 (0) 'Stored'\n+0ECA6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0ECAA CRC                   00000000 (0)\n+0ECAE Compressed Size       00000000 (0)\n+0ECB2 Uncompressed Size     00000000 (0)\n+0ECB6 Filename Length       003B (59)\n+0ECB8 Extra Length          0009 (9)\n+0ECBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xECBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0ECF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0ECF7   Length              0005 (5)\n+0ECF9   Flags               01 (1) 'Modification'\n+0ECFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0ECFE PAYLOAD\n+\n+0FC91 DATA DESCRIPTOR       08074B50 (134695760)\n+0FC95 CRC                   ADE79375 (2917634933)\n+0FC99 Compressed Size       00000F93 (3987)\n+0FC9D Uncompressed Size     00000F93 (3987)\n+\n+0FCA1 LOCAL HEADER #29      04034B50 (67324752)\n+0FCA5 Extract Zip Spec      14 (20) '2.0'\n+0FCA6 Extract OS            00 (0) 'MS-DOS'\n+0FCA7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0FCA9 Compression Method    0000 (0) 'Stored'\n+0FCAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FCAF CRC                   00000000 (0)\n+0FCB3 Compressed Size       00000000 (0)\n+0FCB7 Uncompressed Size     00000000 (0)\n+0FCBB Filename Length       0038 (56)\n+0FCBD Extra Length          0009 (9)\n+0FCBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFCBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FCF7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FCF9   Length              0005 (5)\n+0FCFB   Flags               01 (1) 'Modification'\n+0FCFC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FD00 PAYLOAD\n+\n+1249F DATA DESCRIPTOR       08074B50 (134695760)\n+124A3 CRC                   95A966C5 (2510907077)\n+124A7 Compressed Size       0000279F (10143)\n+124AB Uncompressed Size     0000279F (10143)\n+\n+124AF LOCAL HEADER #30      04034B50 (67324752)\n+124B3 Extract Zip Spec      14 (20) '2.0'\n+124B4 Extract OS            00 (0) 'MS-DOS'\n+124B5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+124B7 Compression Method    0000 (0) 'Stored'\n+124B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+124BD CRC                   00000000 (0)\n+124C1 Compressed Size       00000000 (0)\n+124C5 Uncompressed Size     00000000 (0)\n+124C9 Filename Length       0034 (52)\n+124CB Extra Length          0009 (9)\n+124CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x124CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12501 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12503   Length              0005 (5)\n+12505   Flags               01 (1) 'Modification'\n+12506   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1250A PAYLOAD\n+\n+12BA9 DATA DESCRIPTOR       08074B50 (134695760)\n+12BAD CRC                   FBA20F3E (4221701950)\n+12BB1 Compressed Size       0000069F (1695)\n+12BB5 Uncompressed Size     0000069F (1695)\n+\n+12BB9 LOCAL HEADER #31      04034B50 (67324752)\n+12BBD Extract Zip Spec      14 (20) '2.0'\n+12BBE Extract OS            00 (0) 'MS-DOS'\n+12BBF General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+12BC1 Compression Method    0000 (0) 'Stored'\n+12BC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12BC7 CRC                   00000000 (0)\n+12BCB Compressed Size       00000000 (0)\n+12BCF Uncompressed Size     00000000 (0)\n+12BD3 Filename Length       0035 (53)\n+12BD5 Extra Length          0009 (9)\n+12BD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12BD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12C0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12C0E   Length              0005 (5)\n+12C10   Flags               01 (1) 'Modification'\n+12C11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+12C15 PAYLOAD\n+\n+13D16 DATA DESCRIPTOR       08074B50 (134695760)\n+13D1A CRC                   6BB5A87E (1807067262)\n+13D1E Compressed Size       00001101 (4353)\n+13D22 Uncompressed Size     00001101 (4353)\n+\n+13D26 LOCAL HEADER #32      04034B50 (67324752)\n+13D2A Extract Zip Spec      14 (20) '2.0'\n+13D2B Extract OS            00 (0) 'MS-DOS'\n+13D2C General Purpose Flag  0000 (0)\n+13D2E Compression Method    0000 (0) 'Stored'\n+13D30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13D34 CRC                   00000000 (0)\n+13D38 Compressed Size       00000000 (0)\n+13D3C Uncompressed Size     00000000 (0)\n+13D40 Filename Length       0029 (41)\n+13D42 Extra Length          0009 (9)\n+13D44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13D44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13D6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13D6F   Length              0005 (5)\n+13D71   Flags               01 (1) 'Modification'\n+13D72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+13D76 LOCAL HEADER #33      04034B50 (67324752)\n+13D7A Extract Zip Spec      14 (20) '2.0'\n+13D7B Extract OS            00 (0) 'MS-DOS'\n+13D7C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13D7E Compression Method    0000 (0) 'Stored'\n+13D80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13D84 CRC                   00000000 (0)\n+13D88 Compressed Size       00000000 (0)\n+13D8C Uncompressed Size     00000000 (0)\n+13D90 Filename Length       0043 (67)\n+13D92 Extra Length          0009 (9)\n+13D94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13D94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13DD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13DD9   Length              0005 (5)\n+13DDB   Flags               01 (1) 'Modification'\n+13DDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+13DE0 PAYLOAD\n+\n+14E97 DATA DESCRIPTOR       08074B50 (134695760)\n+14E9B CRC                   B641845C (3057747036)\n+14E9F Compressed Size       000010B7 (4279)\n+14EA3 Uncompressed Size     000010B7 (4279)\n+\n+14EA7 LOCAL HEADER #34      04034B50 (67324752)\n+14EAB Extract Zip Spec      14 (20) '2.0'\n+14EAC Extract OS            00 (0) 'MS-DOS'\n+14EAD General Purpose Flag  0000 (0)\n+14EAF Compression Method    0000 (0) 'Stored'\n+14EB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14EB5 CRC                   00000000 (0)\n+14EB9 Compressed Size       00000000 (0)\n+14EBD Uncompressed Size     00000000 (0)\n+14EC1 Filename Length       0028 (40)\n+14EC3 Extra Length          0009 (9)\n+14EC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14EC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14EED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14EEF   Length              0005 (5)\n+14EF1   Flags               01 (1) 'Modification'\n+14EF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+14EF6 LOCAL HEADER #35      04034B50 (67324752)\n+14EFA Extract Zip Spec      14 (20) '2.0'\n+14EFB Extract OS            00 (0) 'MS-DOS'\n+14EFC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+14EFE Compression Method    0000 (0) 'Stored'\n+14F00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+14F04 CRC                   00000000 (0)\n+14F08 Compressed Size       00000000 (0)\n+14F0C Uncompressed Size     00000000 (0)\n+14F10 Filename Length       003F (63)\n+14F12 Extra Length          0009 (9)\n+14F14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x14F14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+14F53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+14F55   Length              0005 (5)\n+14F57   Flags               01 (1) 'Modification'\n+14F58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+14F5C PAYLOAD\n+\n+158AD DATA DESCRIPTOR       08074B50 (134695760)\n+158B1 CRC                   021D9C13 (35494931)\n+158B5 Compressed Size       00000951 (2385)\n+158B9 Uncompressed Size     00000951 (2385)\n+\n+158BD LOCAL HEADER #36      04034B50 (67324752)\n+158C1 Extract Zip Spec      14 (20) '2.0'\n+158C2 Extract OS            00 (0) 'MS-DOS'\n+158C3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+158C5 Compression Method    0000 (0) 'Stored'\n+158C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+158CB CRC                   00000000 (0)\n+158CF Compressed Size       00000000 (0)\n+158D3 Uncompressed Size     00000000 (0)\n+158D7 Filename Length       004E (78)\n+158D9 Extra Length          0009 (9)\n+158DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x158DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15929 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1592B   Length              0005 (5)\n+1592D   Flags               01 (1) 'Modification'\n+1592E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+15932 PAYLOAD\n+\n+16598 DATA DESCRIPTOR       08074B50 (134695760)\n+1659C CRC                   C419897B (3290007931)\n+165A0 Compressed Size       00000C66 (3174)\n+165A4 Uncompressed Size     00000C66 (3174)\n+\n+165A8 CENTRAL HEADER #1     02014B50 (33639248)\n+165AC Created Zip Spec      14 (20) '2.0'\n+165AD Created OS            00 (0) 'MS-DOS'\n+165AE Extract Zip Spec      14 (20) '2.0'\n+165AF Extract OS            00 (0) 'MS-DOS'\n+165B0 General Purpose Flag  0000 (0)\n+165B2 Compression Method    0000 (0) 'Stored'\n+165B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+165B8 CRC                   00000000 (0)\n+165BC Compressed Size       00000000 (0)\n+165C0 Uncompressed Size     00000000 (0)\n+165C4 Filename Length       0009 (9)\n+165C6 Extra Length          0009 (9)\n+165C8 Comment Length        0000 (0)\n+165CA Disk Start            0000 (0)\n+165CC Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+165CE Ext File Attributes   00000000 (0)\n+165D2 Local Header Offset   00000000 (0)\n+165D6 Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x165D6: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+165DF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+165E1   Length              0005 (5)\n+165E3   Flags               01 (1) 'Modification'\n+165E4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+165E8 CENTRAL HEADER #2     02014B50 (33639248)\n+165EC Created Zip Spec      14 (20) '2.0'\n+165ED Created OS            00 (0) 'MS-DOS'\n+165EE Extract Zip Spec      14 (20) '2.0'\n+165EF Extract OS            00 (0) 'MS-DOS'\n+165F0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+165F2 Compression Method    0000 (0) 'Stored'\n+165F4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+165F8 CRC                   A6C67FA0 (2798026656)\n+165FC Compressed Size       00001817 (6167)\n+16600 Uncompressed Size     00001817 (6167)\n+16604 Filename Length       0015 (21)\n+16606 Extra Length          0009 (9)\n+16608 Comment Length        0000 (0)\n+1660A Disk Start            0000 (0)\n+1660C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1660E Ext File Attributes   00000000 (0)\n+16612 Local Header Offset   00000030 (48)\n+16616 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16616: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1662B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1662D   Length              0005 (5)\n+1662F   Flags               01 (1) 'Modification'\n+16630   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16634 CENTRAL HEADER #3     02014B50 (33639248)\n+16638 Created Zip Spec      14 (20) '2.0'\n+16639 Created OS            00 (0) 'MS-DOS'\n+1663A Extract Zip Spec      14 (20) '2.0'\n+1663B Extract OS            00 (0) 'MS-DOS'\n+1663C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1663E Compression Method    0000 (0) 'Stored'\n+16640 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16644 CRC                   86E2B4B4 (2263004340)\n+16648 Compressed Size       00002C5E (11358)\n+1664C Uncompressed Size     00002C5E (11358)\n+16650 Filename Length       0010 (16)\n+16652 Extra Length          0009 (9)\n+16654 Comment Length        0000 (0)\n+16656 Disk Start            0000 (0)\n+16658 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1665A Ext File Attributes   00000000 (0)\n+1665E Local Header Offset   00001893 (6291)\n+16662 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16662: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16672 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16674   Length              0005 (5)\n+16676   Flags               01 (1) 'Modification'\n+16677   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1667B CENTRAL HEADER #4     02014B50 (33639248)\n+1667F Created Zip Spec      14 (20) '2.0'\n+16680 Created OS            00 (0) 'MS-DOS'\n+16681 Extract Zip Spec      14 (20) '2.0'\n+16682 Extract OS            00 (0) 'MS-DOS'\n+16683 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16685 Compression Method    0000 (0) 'Stored'\n+16687 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1668B CRC                   EE027FB2 (3993141170)\n+1668F Compressed Size       00000019 (25)\n+16693 Uncompressed Size     00000019 (25)\n+16697 Filename Length       0014 (20)\n+16699 Extra Length          0009 (9)\n+1669B Comment Length        0000 (0)\n+1669D Disk Start            0000 (0)\n+1669F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+166A1 Ext File Attributes   00000000 (0)\n+166A5 Local Header Offset   00004538 (17720)\n+166A9 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x166A9: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+166BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+166BF   Length              0005 (5)\n+166C1   Flags               01 (1) 'Modification'\n+166C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+166C6 CENTRAL HEADER #5     02014B50 (33639248)\n+166CA Created Zip Spec      14 (20) '2.0'\n+166CB Created OS            00 (0) 'MS-DOS'\n+166CC Extract Zip Spec      14 (20) '2.0'\n+166CD Extract OS            00 (0) 'MS-DOS'\n+166CE General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+166D0 Compression Method    0000 (0) 'Stored'\n+166D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+166D6 CRC                   75A33247 (1973629511)\n+166DA Compressed Size       000000AD (173)\n+166DE Uncompressed Size     000000AD (173)\n+166E2 Filename Length       000F (15)\n+166E4 Extra Length          0009 (9)\n+166E6 Comment Length        0000 (0)\n+166E8 Disk Start            0000 (0)\n+166EA Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+166EC Ext File Attributes   00000000 (0)\n+166F0 Local Header Offset   0000459C (17820)\n+166F4 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x166C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x166F4: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 16703 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 16705   Length              0005 (5)\n 16707   Flags               01 (1) 'Modification'\n 16708   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-1670C CENTRAL HEADER #24    02014B50 (33639248)\n+1670C CENTRAL HEADER #6     02014B50 (33639248)\n 16710 Created Zip Spec      14 (20) '2.0'\n 16711 Created OS            00 (0) 'MS-DOS'\n 16712 Extract Zip Spec      14 (20) '2.0'\n 16713 Extract OS            00 (0) 'MS-DOS'\n-16714 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n+16714 General Purpose Flag  0000 (0)\n 16716 Compression Method    0000 (0) 'Stored'\n 16718 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1671C CRC                   45D210E4 (1171394788)\n-16720 Compressed Size       000005CE (1486)\n-16724 Uncompressed Size     000005CE (1486)\n-16728 Filename Length       0042 (66)\n+1671C CRC                   00000000 (0)\n+16720 Compressed Size       00000000 (0)\n+16724 Uncompressed Size     00000000 (0)\n+16728 Filename Length       000F (15)\n 1672A Extra Length          0009 (9)\n 1672C Comment Length        0000 (0)\n 1672E Disk Start            0000 (0)\n 16730 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n 16732 Ext File Attributes   00000000 (0)\n-16736 Local Header Offset   00006446 (25670)\n-1673A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+16736 Local Header Offset   0000468F (18063)\n+1673A Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1673A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1673A: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1677C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1677E   Length              0005 (5)\n-16780   Flags               01 (1) 'Modification'\n-16781   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16785 CENTRAL HEADER #25    02014B50 (33639248)\n-16789 Created Zip Spec      14 (20) '2.0'\n-1678A Created OS            00 (0) 'MS-DOS'\n-1678B Extract Zip Spec      14 (20) '2.0'\n-1678C Extract OS            00 (0) 'MS-DOS'\n-1678D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1678F Compression Method    0000 (0) 'Stored'\n-16791 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16795 CRC                   FCFC2855 (4244383829)\n-16799 Compressed Size       00006050 (24656)\n-1679D Uncompressed Size     00006050 (24656)\n-167A1 Filename Length       0035 (53)\n-167A3 Extra Length          0009 (9)\n-167A5 Comment Length        0000 (0)\n-167A7 Disk Start            0000 (0)\n-167A9 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-167AB Ext File Attributes   00000000 (0)\n-167AF Local Header Offset   00006A8D (27277)\n-167B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x167B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-167E8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-167EA   Length              0005 (5)\n-167EC   Flags               01 (1) 'Modification'\n-167ED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-167F1 CENTRAL HEADER #26    02014B50 (33639248)\n-167F5 Created Zip Spec      14 (20) '2.0'\n-167F6 Created OS            00 (0) 'MS-DOS'\n-167F7 Extract Zip Spec      14 (20) '2.0'\n-167F8 Extract OS            00 (0) 'MS-DOS'\n-167F9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-167FB Compression Method    0000 (0) 'Stored'\n-167FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16801 CRC                   F36E07A4 (4084074404)\n-16805 Compressed Size       00000528 (1320)\n-16809 Uncompressed Size     00000528 (1320)\n-1680D Filename Length       0039 (57)\n-1680F Extra Length          0009 (9)\n-16811 Comment Length        0000 (0)\n-16813 Disk Start            0000 (0)\n-16815 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16817 Ext File Attributes   00000000 (0)\n-1681B Local Header Offset   0000CB49 (52041)\n-1681F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1681F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16858 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1685A   Length              0005 (5)\n-1685C   Flags               01 (1) 'Modification'\n-1685D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16861 CENTRAL HEADER #27    02014B50 (33639248)\n-16865 Created Zip Spec      14 (20) '2.0'\n-16866 Created OS            00 (0) 'MS-DOS'\n-16867 Extract Zip Spec      14 (20) '2.0'\n-16868 Extract OS            00 (0) 'MS-DOS'\n-16869 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1686B Compression Method    0000 (0) 'Stored'\n-1686D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16871 CRC                   4E01C35D (1308738397)\n-16875 Compressed Size       000017D8 (6104)\n-16879 Uncompressed Size     000017D8 (6104)\n-1687D Filename Length       0037 (55)\n-1687F Extra Length          0009 (9)\n-16881 Comment Length        0000 (0)\n-16883 Disk Start            0000 (0)\n-16885 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16887 Ext File Attributes   00000000 (0)\n-1688B Local Header Offset   0000D0E1 (53473)\n-1688F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1688F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-168C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-168C8   Length              0005 (5)\n-168CA   Flags               01 (1) 'Modification'\n-168CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-168CF CENTRAL HEADER #28    02014B50 (33639248)\n-168D3 Created Zip Spec      14 (20) '2.0'\n-168D4 Created OS            00 (0) 'MS-DOS'\n-168D5 Extract Zip Spec      14 (20) '2.0'\n-168D6 Extract OS            00 (0) 'MS-DOS'\n-168D7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-168D9 Compression Method    0000 (0) 'Stored'\n-168DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-168DF CRC                   CCF50709 (3438610185)\n-168E3 Compressed Size       00000F33 (3891)\n-168E7 Uncompressed Size     00000F33 (3891)\n-168EB Filename Length       003B (59)\n-168ED Extra Length          0009 (9)\n-168EF Comment Length        0000 (0)\n-168F1 Disk Start            0000 (0)\n-168F3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-168F5 Ext File Attributes   00000000 (0)\n-168F9 Local Header Offset   0000E927 (59687)\n-168FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x168FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16938 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1693A   Length              0005 (5)\n-1693C   Flags               01 (1) 'Modification'\n-1693D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16941 CENTRAL HEADER #29    02014B50 (33639248)\n-16945 Created Zip Spec      14 (20) '2.0'\n-16946 Created OS            00 (0) 'MS-DOS'\n-16947 Extract Zip Spec      14 (20) '2.0'\n-16948 Extract OS            00 (0) 'MS-DOS'\n-16949 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1694B Compression Method    0000 (0) 'Stored'\n-1694D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16951 CRC                   8C523252 (2354197074)\n-16955 Compressed Size       0000268F (9871)\n-16959 Uncompressed Size     0000268F (9871)\n-1695D Filename Length       0038 (56)\n-1695F Extra Length          0009 (9)\n-16961 Comment Length        0000 (0)\n-16963 Disk Start            0000 (0)\n-16965 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16967 Ext File Attributes   00000000 (0)\n-1696B Local Header Offset   0000F8CC (63692)\n-1696F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1696F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-169A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-169A9   Length              0005 (5)\n-169AB   Flags               01 (1) 'Modification'\n-169AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-169B0 CENTRAL HEADER #30    02014B50 (33639248)\n-169B4 Created Zip Spec      14 (20) '2.0'\n-169B5 Created OS            00 (0) 'MS-DOS'\n-169B6 Extract Zip Spec      14 (20) '2.0'\n-169B7 Extract OS            00 (0) 'MS-DOS'\n-169B8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-169BA Compression Method    0000 (0) 'Stored'\n-169BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-169C0 CRC                   CBF7FEA9 (3422027433)\n-169C4 Compressed Size       0000066C (1644)\n-169C8 Uncompressed Size     0000066C (1644)\n-169CC Filename Length       0034 (52)\n-169CE Extra Length          0009 (9)\n-169D0 Comment Length        0000 (0)\n-169D2 Disk Start            0000 (0)\n-169D4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-169D6 Ext File Attributes   00000000 (0)\n-169DA Local Header Offset   00011FCA (73674)\n-169DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x169DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16A12 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16A14   Length              0005 (5)\n-16A16   Flags               01 (1) 'Modification'\n-16A17   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16A1B CENTRAL HEADER #31    02014B50 (33639248)\n-16A1F Created Zip Spec      14 (20) '2.0'\n-16A20 Created OS            00 (0) 'MS-DOS'\n-16A21 Extract Zip Spec      14 (20) '2.0'\n-16A22 Extract OS            00 (0) 'MS-DOS'\n-16A23 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-16A25 Compression Method    0000 (0) 'Stored'\n-16A27 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16A2B CRC                   FD7FF5E7 (4253021671)\n-16A2F Compressed Size       0000107A (4218)\n-16A33 Uncompressed Size     0000107A (4218)\n-16A37 Filename Length       0035 (53)\n-16A39 Extra Length          0009 (9)\n-16A3B Comment Length        0000 (0)\n-16A3D Disk Start            0000 (0)\n-16A3F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16A41 Ext File Attributes   00000000 (0)\n-16A45 Local Header Offset   000126A1 (75425)\n-16A49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16A49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16A7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16A80   Length              0005 (5)\n-16A82   Flags               01 (1) 'Modification'\n-16A83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16A87 CENTRAL HEADER #32    02014B50 (33639248)\n-16A8B Created Zip Spec      14 (20) '2.0'\n-16A8C Created OS            00 (0) 'MS-DOS'\n-16A8D Extract Zip Spec      14 (20) '2.0'\n-16A8E Extract OS            00 (0) 'MS-DOS'\n-16A8F General Purpose Flag  0000 (0)\n-16A91 Compression Method    0000 (0) 'Stored'\n-16A93 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16A97 CRC                   00000000 (0)\n-16A9B Compressed Size       00000000 (0)\n-16A9F Uncompressed Size     00000000 (0)\n-16AA3 Filename Length       0029 (41)\n-16AA5 Extra Length          0009 (9)\n-16AA7 Comment Length        0000 (0)\n-16AA9 Disk Start            0000 (0)\n-16AAB Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16AAD Ext File Attributes   00000000 (0)\n-16AB1 Local Header Offset   00013787 (79751)\n-16AB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16AB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16ADE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16AE0   Length              0005 (5)\n-16AE2   Flags               01 (1) 'Modification'\n-16AE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16AE7 CENTRAL HEADER #33    02014B50 (33639248)\n-16AEB Created Zip Spec      14 (20) '2.0'\n-16AEC Created OS            00 (0) 'MS-DOS'\n-16AED Extract Zip Spec      14 (20) '2.0'\n-16AEE Extract OS            00 (0) 'MS-DOS'\n-16AEF General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-16AF1 Compression Method    0000 (0) 'Stored'\n-16AF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16AF7 CRC                   6A1A9325 (1780126501)\n-16AFB Compressed Size       0000103E (4158)\n-16AFF Uncompressed Size     0000103E (4158)\n-16B03 Filename Length       0043 (67)\n-16B05 Extra Length          0009 (9)\n-16B07 Comment Length        0000 (0)\n-16B09 Disk Start            0000 (0)\n-16B0B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16B0D Ext File Attributes   00000000 (0)\n-16B11 Local Header Offset   000137D7 (79831)\n-16B15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16B15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16B58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16B5A   Length              0005 (5)\n-16B5C   Flags               01 (1) 'Modification'\n-16B5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16B61 CENTRAL HEADER #34    02014B50 (33639248)\n-16B65 Created Zip Spec      14 (20) '2.0'\n-16B66 Created OS            00 (0) 'MS-DOS'\n-16B67 Extract Zip Spec      14 (20) '2.0'\n-16B68 Extract OS            00 (0) 'MS-DOS'\n-16B69 General Purpose Flag  0000 (0)\n-16B6B Compression Method    0000 (0) 'Stored'\n-16B6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16B71 CRC                   00000000 (0)\n-16B75 Compressed Size       00000000 (0)\n-16B79 Uncompressed Size     00000000 (0)\n-16B7D Filename Length       0028 (40)\n-16B7F Extra Length          0009 (9)\n-16B81 Comment Length        0000 (0)\n-16B83 Disk Start            0000 (0)\n-16B85 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16B87 Ext File Attributes   00000000 (0)\n-16B8B Local Header Offset   0001488F (84111)\n-16B8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16B8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16BB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16BB9   Length              0005 (5)\n-16BBB   Flags               01 (1) 'Modification'\n-16BBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16BC0 CENTRAL HEADER #35    02014B50 (33639248)\n-16BC4 Created Zip Spec      14 (20) '2.0'\n-16BC5 Created OS            00 (0) 'MS-DOS'\n-16BC6 Extract Zip Spec      14 (20) '2.0'\n-16BC7 Extract OS            00 (0) 'MS-DOS'\n-16BC8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-16BCA Compression Method    0000 (0) 'Stored'\n-16BCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16BD0 CRC                   021D9C13 (35494931)\n-16BD4 Compressed Size       00000951 (2385)\n-16BD8 Uncompressed Size     00000951 (2385)\n-16BDC Filename Length       003F (63)\n-16BDE Extra Length          0009 (9)\n-16BE0 Comment Length        0000 (0)\n-16BE2 Disk Start            0000 (0)\n-16BE4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16BE6 Ext File Attributes   00000000 (0)\n-16BEA Local Header Offset   000148DE (84190)\n-16BEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16BEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16C2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16C2F   Length              0005 (5)\n-16C31   Flags               01 (1) 'Modification'\n-16C32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16C36 CENTRAL HEADER #36    02014B50 (33639248)\n-16C3A Created Zip Spec      14 (20) '2.0'\n-16C3B Created OS            00 (0) 'MS-DOS'\n-16C3C Extract Zip Spec      14 (20) '2.0'\n-16C3D Extract OS            00 (0) 'MS-DOS'\n-16C3E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-16C40 Compression Method    0000 (0) 'Stored'\n-16C42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16C46 CRC                   48F808F8 (1224214776)\n-16C4A Compressed Size       00000BF1 (3057)\n-16C4E Uncompressed Size     00000BF1 (3057)\n-16C52 Filename Length       004E (78)\n-16C54 Extra Length          0009 (9)\n-16C56 Comment Length        0000 (0)\n-16C58 Disk Start            0000 (0)\n-16C5A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-16C5C Ext File Attributes   00000000 (0)\n-16C60 Local Header Offset   000152A5 (86693)\n-16C64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16C64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-16CB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-16CB4   Length              0005 (5)\n-16CB6   Flags               01 (1) 'Modification'\n-16CB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-16CBB END CENTRAL HEADER    06054B50 (101010256)\n-16CBF Number of this disk   0000 (0)\n-16CC1 Central Dir Disk no   0000 (0)\n-16CC3 Entries in this disk  0024 (36)\n-16CC5 Total Entries         0024 (36)\n-16CC7 Size of Central Dir   00000DA0 (3488)\n-16CCB Offset to Central Dir 00015F1B (89883)\n-16CCF Comment Length        0000 (0)\n+16749 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1674B   Length              0005 (5)\n+1674D   Flags               01 (1) 'Modification'\n+1674E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16752 CENTRAL HEADER #7     02014B50 (33639248)\n+16756 Created Zip Spec      14 (20) '2.0'\n+16757 Created OS            00 (0) 'MS-DOS'\n+16758 Extract Zip Spec      14 (20) '2.0'\n+16759 Extract OS            00 (0) 'MS-DOS'\n+1675A General Purpose Flag  0000 (0)\n+1675C Compression Method    0000 (0) 'Stored'\n+1675E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16762 CRC                   00000000 (0)\n+16766 Compressed Size       00000000 (0)\n+1676A Uncompressed Size     00000000 (0)\n+1676E Filename Length       0018 (24)\n+16770 Extra Length          0009 (9)\n+16772 Comment Length        0000 (0)\n+16774 Disk Start            0000 (0)\n+16776 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16778 Ext File Attributes   00000000 (0)\n+1677C Local Header Offset   000046C5 (18117)\n+16780 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16780: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16798 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1679A   Length              0005 (5)\n+1679C   Flags               01 (1) 'Modification'\n+1679D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+167A1 CENTRAL HEADER #8     02014B50 (33639248)\n+167A5 Created Zip Spec      14 (20) '2.0'\n+167A6 Created OS            00 (0) 'MS-DOS'\n+167A7 Extract Zip Spec      14 (20) '2.0'\n+167A8 Extract OS            00 (0) 'MS-DOS'\n+167A9 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+167AB Compression Method    0000 (0) 'Stored'\n+167AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+167B1 CRC                   A41E0996 (2753431958)\n+167B5 Compressed Size       00000037 (55)\n+167B9 Uncompressed Size     00000037 (55)\n+167BD Filename Length       0038 (56)\n+167BF Extra Length          0009 (9)\n+167C1 Comment Length        0000 (0)\n+167C3 Disk Start            0000 (0)\n+167C5 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+167C7 Ext File Attributes   00000000 (0)\n+167CB Local Header Offset   00004704 (18180)\n+167CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x167CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16807 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16809   Length              0005 (5)\n+1680B   Flags               01 (1) 'Modification'\n+1680C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16810 CENTRAL HEADER #9     02014B50 (33639248)\n+16814 Created Zip Spec      14 (20) '2.0'\n+16815 Created OS            00 (0) 'MS-DOS'\n+16816 Extract Zip Spec      14 (20) '2.0'\n+16817 Extract OS            00 (0) 'MS-DOS'\n+16818 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1681A Compression Method    0000 (0) 'Stored'\n+1681C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16820 CRC                   484E8E33 (1213107763)\n+16824 Compressed Size       0000003A (58)\n+16828 Uncompressed Size     0000003A (58)\n+1682C Filename Length       0035 (53)\n+1682E Extra Length          0009 (9)\n+16830 Comment Length        0000 (0)\n+16832 Disk Start            0000 (0)\n+16834 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16836 Ext File Attributes   00000000 (0)\n+1683A Local Header Offset   000047AA (18346)\n+1683E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1683E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16873 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16875   Length              0005 (5)\n+16877   Flags               01 (1) 'Modification'\n+16878   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1687C CENTRAL HEADER #10    02014B50 (33639248)\n+16880 Created Zip Spec      14 (20) '2.0'\n+16881 Created OS            00 (0) 'MS-DOS'\n+16882 Extract Zip Spec      14 (20) '2.0'\n+16883 Extract OS            00 (0) 'MS-DOS'\n+16884 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16886 Compression Method    0000 (0) 'Stored'\n+16888 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1688C CRC                   78C43CAA (2026126506)\n+16890 Compressed Size       00000088 (136)\n+16894 Uncompressed Size     00000088 (136)\n+16898 Filename Length       004F (79)\n+1689A Extra Length          0009 (9)\n+1689C Comment Length        0000 (0)\n+1689E Disk Start            0000 (0)\n+168A0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+168A2 Ext File Attributes   00000000 (0)\n+168A6 Local Header Offset   00004850 (18512)\n+168AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x168AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+168F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+168FB   Length              0005 (5)\n+168FD   Flags               01 (1) 'Modification'\n+168FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16902 CENTRAL HEADER #11    02014B50 (33639248)\n+16906 Created Zip Spec      14 (20) '2.0'\n+16907 Created OS            00 (0) 'MS-DOS'\n+16908 Extract Zip Spec      14 (20) '2.0'\n+16909 Extract OS            00 (0) 'MS-DOS'\n+1690A General Purpose Flag  0000 (0)\n+1690C Compression Method    0000 (0) 'Stored'\n+1690E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16912 CRC                   00000000 (0)\n+16916 Compressed Size       00000000 (0)\n+1691A Uncompressed Size     00000000 (0)\n+1691E Filename Length       000F (15)\n+16920 Extra Length          0009 (9)\n+16922 Comment Length        0000 (0)\n+16924 Disk Start            0000 (0)\n+16926 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16928 Ext File Attributes   00000000 (0)\n+1692C Local Header Offset   0000495E (18782)\n+16930 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16930: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1693F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16941   Length              0005 (5)\n+16943   Flags               01 (1) 'Modification'\n+16944   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16948 CENTRAL HEADER #12    02014B50 (33639248)\n+1694C Created Zip Spec      14 (20) '2.0'\n+1694D Created OS            00 (0) 'MS-DOS'\n+1694E Extract Zip Spec      14 (20) '2.0'\n+1694F Extract OS            00 (0) 'MS-DOS'\n+16950 General Purpose Flag  0000 (0)\n+16952 Compression Method    0000 (0) 'Stored'\n+16954 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16958 CRC                   00000000 (0)\n+1695C Compressed Size       00000000 (0)\n+16960 Uncompressed Size     00000000 (0)\n+16964 Filename Length       0020 (32)\n+16966 Extra Length          0009 (9)\n+16968 Comment Length        0000 (0)\n+1696A Disk Start            0000 (0)\n+1696C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1696E Ext File Attributes   00000000 (0)\n+16972 Local Header Offset   00004994 (18836)\n+16976 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16976: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16996 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16998   Length              0005 (5)\n+1699A   Flags               01 (1) 'Modification'\n+1699B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1699F CENTRAL HEADER #13    02014B50 (33639248)\n+169A3 Created Zip Spec      14 (20) '2.0'\n+169A4 Created OS            00 (0) 'MS-DOS'\n+169A5 Extract Zip Spec      14 (20) '2.0'\n+169A6 Extract OS            00 (0) 'MS-DOS'\n+169A7 General Purpose Flag  0000 (0)\n+169A9 Compression Method    0000 (0) 'Stored'\n+169AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+169AF CRC                   00000000 (0)\n+169B3 Compressed Size       00000000 (0)\n+169B7 Uncompressed Size     00000000 (0)\n+169BB Filename Length       0031 (49)\n+169BD Extra Length          0009 (9)\n+169BF Comment Length        0000 (0)\n+169C1 Disk Start            0000 (0)\n+169C3 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+169C5 Ext File Attributes   00000000 (0)\n+169C9 Local Header Offset   000049DB (18907)\n+169CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x169CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+169FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16A00   Length              0005 (5)\n+16A02   Flags               01 (1) 'Modification'\n+16A03   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16A07 CENTRAL HEADER #14    02014B50 (33639248)\n+16A0B Created Zip Spec      14 (20) '2.0'\n+16A0C Created OS            00 (0) 'MS-DOS'\n+16A0D Extract Zip Spec      14 (20) '2.0'\n+16A0E Extract OS            00 (0) 'MS-DOS'\n+16A0F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16A11 Compression Method    0000 (0) 'Stored'\n+16A13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16A17 CRC                   00000000 (0)\n+16A1B Compressed Size       00000000 (0)\n+16A1F Uncompressed Size     00000000 (0)\n+16A23 Filename Length       003F (63)\n+16A25 Extra Length          0009 (9)\n+16A27 Comment Length        0000 (0)\n+16A29 Disk Start            0000 (0)\n+16A2B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16A2D Ext File Attributes   00000000 (0)\n+16A31 Local Header Offset   00004A33 (18995)\n+16A35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16A35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16A74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16A76   Length              0005 (5)\n+16A78   Flags               01 (1) 'Modification'\n+16A79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16A7D CENTRAL HEADER #15    02014B50 (33639248)\n+16A81 Created Zip Spec      14 (20) '2.0'\n+16A82 Created OS            00 (0) 'MS-DOS'\n+16A83 Extract Zip Spec      14 (20) '2.0'\n+16A84 Extract OS            00 (0) 'MS-DOS'\n+16A85 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16A87 Compression Method    0000 (0) 'Stored'\n+16A89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16A8D CRC                   FBA32B90 (4221774736)\n+16A91 Compressed Size       00000C2F (3119)\n+16A95 Uncompressed Size     00000C2F (3119)\n+16A99 Filename Length       0038 (56)\n+16A9B Extra Length          0009 (9)\n+16A9D Comment Length        0000 (0)\n+16A9F Disk Start            0000 (0)\n+16AA1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16AA3 Ext File Attributes   00000000 (0)\n+16AA7 Local Header Offset   00004AA9 (19113)\n+16AAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16AAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16AE3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16AE5   Length              0005 (5)\n+16AE7   Flags               01 (1) 'Modification'\n+16AE8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16AEC CENTRAL HEADER #16    02014B50 (33639248)\n+16AF0 Created Zip Spec      14 (20) '2.0'\n+16AF1 Created OS            00 (0) 'MS-DOS'\n+16AF2 Extract Zip Spec      14 (20) '2.0'\n+16AF3 Extract OS            00 (0) 'MS-DOS'\n+16AF4 General Purpose Flag  0000 (0)\n+16AF6 Compression Method    0000 (0) 'Stored'\n+16AF8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16AFC CRC                   00000000 (0)\n+16B00 Compressed Size       00000000 (0)\n+16B04 Uncompressed Size     00000000 (0)\n+16B08 Filename Length       0004 (4)\n+16B0A Extra Length          0009 (9)\n+16B0C Comment Length        0000 (0)\n+16B0E Disk Start            0000 (0)\n+16B10 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16B12 Ext File Attributes   00000000 (0)\n+16B16 Local Header Offset   00005747 (22343)\n+16B1A Filename              'XXXX'\n+#\n+# WARNING: Offset 0x16B1A: Filename 'XXXX'\n+#          Zero length filename\n+#\n+16B1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16B20   Length              0005 (5)\n+16B22   Flags               01 (1) 'Modification'\n+16B23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16B27 CENTRAL HEADER #17    02014B50 (33639248)\n+16B2B Created Zip Spec      14 (20) '2.0'\n+16B2C Created OS            00 (0) 'MS-DOS'\n+16B2D Extract Zip Spec      14 (20) '2.0'\n+16B2E Extract OS            00 (0) 'MS-DOS'\n+16B2F General Purpose Flag  0000 (0)\n+16B31 Compression Method    0000 (0) 'Stored'\n+16B33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16B37 CRC                   00000000 (0)\n+16B3B Compressed Size       00000000 (0)\n+16B3F Uncompressed Size     00000000 (0)\n+16B43 Filename Length       000B (11)\n+16B45 Extra Length          0009 (9)\n+16B47 Comment Length        0000 (0)\n+16B49 Disk Start            0000 (0)\n+16B4B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16B4D Ext File Attributes   00000000 (0)\n+16B51 Local Header Offset   00005772 (22386)\n+16B55 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16B55: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16B60 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16B62   Length              0005 (5)\n+16B64   Flags               01 (1) 'Modification'\n+16B65   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16B69 CENTRAL HEADER #18    02014B50 (33639248)\n+16B6D Created Zip Spec      14 (20) '2.0'\n+16B6E Created OS            00 (0) 'MS-DOS'\n+16B6F Extract Zip Spec      14 (20) '2.0'\n+16B70 Extract OS            00 (0) 'MS-DOS'\n+16B71 General Purpose Flag  0000 (0)\n+16B73 Compression Method    0000 (0) 'Stored'\n+16B75 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16B79 CRC                   00000000 (0)\n+16B7D Compressed Size       00000000 (0)\n+16B81 Uncompressed Size     00000000 (0)\n+16B85 Filename Length       0011 (17)\n+16B87 Extra Length          0009 (9)\n+16B89 Comment Length        0000 (0)\n+16B8B Disk Start            0000 (0)\n+16B8D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16B8F Ext File Attributes   00000000 (0)\n+16B93 Local Header Offset   000057A4 (22436)\n+16B97 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16B97: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16BA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16BAA   Length              0005 (5)\n+16BAC   Flags               01 (1) 'Modification'\n+16BAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16BB1 CENTRAL HEADER #19    02014B50 (33639248)\n+16BB5 Created Zip Spec      14 (20) '2.0'\n+16BB6 Created OS            00 (0) 'MS-DOS'\n+16BB7 Extract Zip Spec      14 (20) '2.0'\n+16BB8 Extract OS            00 (0) 'MS-DOS'\n+16BB9 General Purpose Flag  0000 (0)\n+16BBB Compression Method    0000 (0) 'Stored'\n+16BBD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16BC1 CRC                   00000000 (0)\n+16BC5 Compressed Size       00000000 (0)\n+16BC9 Uncompressed Size     00000000 (0)\n+16BCD Filename Length       0015 (21)\n+16BCF Extra Length          0009 (9)\n+16BD1 Comment Length        0000 (0)\n+16BD3 Disk Start            0000 (0)\n+16BD5 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16BD7 Ext File Attributes   00000000 (0)\n+16BDB Local Header Offset   000057DC (22492)\n+16BDF Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16BDF: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16BF4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16BF6   Length              0005 (5)\n+16BF8   Flags               01 (1) 'Modification'\n+16BF9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16BFD CENTRAL HEADER #20    02014B50 (33639248)\n+16C01 Created Zip Spec      14 (20) '2.0'\n+16C02 Created OS            00 (0) 'MS-DOS'\n+16C03 Extract Zip Spec      14 (20) '2.0'\n+16C04 Extract OS            00 (0) 'MS-DOS'\n+16C05 General Purpose Flag  0000 (0)\n+16C07 Compression Method    0000 (0) 'Stored'\n+16C09 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16C0D CRC                   00000000 (0)\n+16C11 Compressed Size       00000000 (0)\n+16C15 Uncompressed Size     00000000 (0)\n+16C19 Filename Length       001E (30)\n+16C1B Extra Length          0009 (9)\n+16C1D Comment Length        0000 (0)\n+16C1F Disk Start            0000 (0)\n+16C21 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16C23 Ext File Attributes   00000000 (0)\n+16C27 Local Header Offset   00005818 (22552)\n+16C2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16C2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16C49 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16C4B   Length              0005 (5)\n+16C4D   Flags               01 (1) 'Modification'\n+16C4E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16C52 CENTRAL HEADER #21    02014B50 (33639248)\n+16C56 Created Zip Spec      14 (20) '2.0'\n+16C57 Created OS            00 (0) 'MS-DOS'\n+16C58 Extract Zip Spec      14 (20) '2.0'\n+16C59 Extract OS            00 (0) 'MS-DOS'\n+16C5A General Purpose Flag  0000 (0)\n+16C5C Compression Method    0000 (0) 'Stored'\n+16C5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16C62 CRC                   00000000 (0)\n+16C66 Compressed Size       00000000 (0)\n+16C6A Uncompressed Size     00000000 (0)\n+16C6E Filename Length       0025 (37)\n+16C70 Extra Length          0009 (9)\n+16C72 Comment Length        0000 (0)\n+16C74 Disk Start            0000 (0)\n+16C76 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16C78 Ext File Attributes   00000000 (0)\n+16C7C Local Header Offset   0000585D (22621)\n+16C80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16C80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16CA5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16CA7   Length              0005 (5)\n+16CA9   Flags               01 (1) 'Modification'\n+16CAA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16CAE CENTRAL HEADER #22    02014B50 (33639248)\n+16CB2 Created Zip Spec      14 (20) '2.0'\n+16CB3 Created OS            00 (0) 'MS-DOS'\n+16CB4 Extract Zip Spec      14 (20) '2.0'\n+16CB5 Extract OS            00 (0) 'MS-DOS'\n+16CB6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16CB8 Compression Method    0000 (0) 'Stored'\n+16CBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16CBE CRC                   63A56C0E (1671785486)\n+16CC2 Compressed Size       000004E2 (1250)\n+16CC6 Uncompressed Size     000004E2 (1250)\n+16CCA Filename Length       003C (60)\n+16CCC Extra Length          0009 (9)\n+16CCE Comment Length        0000 (0)\n+16CD0 Disk Start            0000 (0)\n+16CD2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16CD4 Ext File Attributes   00000000 (0)\n+16CD8 Local Header Offset   000058A9 (22697)\n+16CDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16CDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16D18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16D1A   Length              0005 (5)\n+16D1C   Flags               01 (1) 'Modification'\n+16D1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16D21 CENTRAL HEADER #23    02014B50 (33639248)\n+16D25 Created Zip Spec      14 (20) '2.0'\n+16D26 Created OS            00 (0) 'MS-DOS'\n+16D27 Extract Zip Spec      14 (20) '2.0'\n+16D28 Extract OS            00 (0) 'MS-DOS'\n+16D29 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16D2B Compression Method    0000 (0) 'Stored'\n+16D2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16D31 CRC                   E0FB0689 (3774547593)\n+16D35 Compressed Size       000005C0 (1472)\n+16D39 Uncompressed Size     000005C0 (1472)\n+16D3D Filename Length       0041 (65)\n+16D3F Extra Length          0009 (9)\n+16D41 Comment Length        0000 (0)\n+16D43 Disk Start            0000 (0)\n+16D45 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16D47 Ext File Attributes   00000000 (0)\n+16D4B Local Header Offset   00005DFE (24062)\n+16D4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16D4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16D90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16D92   Length              0005 (5)\n+16D94   Flags               01 (1) 'Modification'\n+16D95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16D99 CENTRAL HEADER #24    02014B50 (33639248)\n+16D9D Created Zip Spec      14 (20) '2.0'\n+16D9E Created OS            00 (0) 'MS-DOS'\n+16D9F Extract Zip Spec      14 (20) '2.0'\n+16DA0 Extract OS            00 (0) 'MS-DOS'\n+16DA1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16DA3 Compression Method    0000 (0) 'Stored'\n+16DA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16DA9 CRC                   45D210E4 (1171394788)\n+16DAD Compressed Size       000005CE (1486)\n+16DB1 Uncompressed Size     000005CE (1486)\n+16DB5 Filename Length       0042 (66)\n+16DB7 Extra Length          0009 (9)\n+16DB9 Comment Length        0000 (0)\n+16DBB Disk Start            0000 (0)\n+16DBD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16DBF Ext File Attributes   00000000 (0)\n+16DC3 Local Header Offset   00006436 (25654)\n+16DC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16DC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16E09 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16E0B   Length              0005 (5)\n+16E0D   Flags               01 (1) 'Modification'\n+16E0E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16E12 CENTRAL HEADER #25    02014B50 (33639248)\n+16E16 Created Zip Spec      14 (20) '2.0'\n+16E17 Created OS            00 (0) 'MS-DOS'\n+16E18 Extract Zip Spec      14 (20) '2.0'\n+16E19 Extract OS            00 (0) 'MS-DOS'\n+16E1A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16E1C Compression Method    0000 (0) 'Stored'\n+16E1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16E22 CRC                   F30965C2 (4077479362)\n+16E26 Compressed Size       0000630A (25354)\n+16E2A Uncompressed Size     0000630A (25354)\n+16E2E Filename Length       0035 (53)\n+16E30 Extra Length          0009 (9)\n+16E32 Comment Length        0000 (0)\n+16E34 Disk Start            0000 (0)\n+16E36 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16E38 Ext File Attributes   00000000 (0)\n+16E3C Local Header Offset   00006A7D (27261)\n+16E40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16E40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16E75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16E77   Length              0005 (5)\n+16E79   Flags               01 (1) 'Modification'\n+16E7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16E7E CENTRAL HEADER #26    02014B50 (33639248)\n+16E82 Created Zip Spec      14 (20) '2.0'\n+16E83 Created OS            00 (0) 'MS-DOS'\n+16E84 Extract Zip Spec      14 (20) '2.0'\n+16E85 Extract OS            00 (0) 'MS-DOS'\n+16E86 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16E88 Compression Method    0000 (0) 'Stored'\n+16E8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16E8E CRC                   046733D7 (73872343)\n+16E92 Compressed Size       00000548 (1352)\n+16E96 Uncompressed Size     00000548 (1352)\n+16E9A Filename Length       0039 (57)\n+16E9C Extra Length          0009 (9)\n+16E9E Comment Length        0000 (0)\n+16EA0 Disk Start            0000 (0)\n+16EA2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16EA4 Ext File Attributes   00000000 (0)\n+16EA8 Local Header Offset   0000CDF3 (52723)\n+16EAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16EAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16EE5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16EE7   Length              0005 (5)\n+16EE9   Flags               01 (1) 'Modification'\n+16EEA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16EEE CENTRAL HEADER #27    02014B50 (33639248)\n+16EF2 Created Zip Spec      14 (20) '2.0'\n+16EF3 Created OS            00 (0) 'MS-DOS'\n+16EF4 Extract Zip Spec      14 (20) '2.0'\n+16EF5 Extract OS            00 (0) 'MS-DOS'\n+16EF6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16EF8 Compression Method    0000 (0) 'Stored'\n+16EFA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16EFE CRC                   0C743F4B (208944971)\n+16F02 Compressed Size       00001883 (6275)\n+16F06 Uncompressed Size     00001883 (6275)\n+16F0A Filename Length       0037 (55)\n+16F0C Extra Length          0009 (9)\n+16F0E Comment Length        0000 (0)\n+16F10 Disk Start            0000 (0)\n+16F12 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16F14 Ext File Attributes   00000000 (0)\n+16F18 Local Header Offset   0000D3AB (54187)\n+16F1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16F1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16F53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16F55   Length              0005 (5)\n+16F57   Flags               01 (1) 'Modification'\n+16F58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16F5C CENTRAL HEADER #28    02014B50 (33639248)\n+16F60 Created Zip Spec      14 (20) '2.0'\n+16F61 Created OS            00 (0) 'MS-DOS'\n+16F62 Extract Zip Spec      14 (20) '2.0'\n+16F63 Extract OS            00 (0) 'MS-DOS'\n+16F64 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16F66 Compression Method    0000 (0) 'Stored'\n+16F68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16F6C CRC                   ADE79375 (2917634933)\n+16F70 Compressed Size       00000F93 (3987)\n+16F74 Uncompressed Size     00000F93 (3987)\n+16F78 Filename Length       003B (59)\n+16F7A Extra Length          0009 (9)\n+16F7C Comment Length        0000 (0)\n+16F7E Disk Start            0000 (0)\n+16F80 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16F82 Ext File Attributes   00000000 (0)\n+16F86 Local Header Offset   0000EC9C (60572)\n+16F8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16F8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16FC5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16FC7   Length              0005 (5)\n+16FC9   Flags               01 (1) 'Modification'\n+16FCA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+16FCE CENTRAL HEADER #29    02014B50 (33639248)\n+16FD2 Created Zip Spec      14 (20) '2.0'\n+16FD3 Created OS            00 (0) 'MS-DOS'\n+16FD4 Extract Zip Spec      14 (20) '2.0'\n+16FD5 Extract OS            00 (0) 'MS-DOS'\n+16FD6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16FD8 Compression Method    0000 (0) 'Stored'\n+16FDA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16FDE CRC                   95A966C5 (2510907077)\n+16FE2 Compressed Size       0000279F (10143)\n+16FE6 Uncompressed Size     0000279F (10143)\n+16FEA Filename Length       0038 (56)\n+16FEC Extra Length          0009 (9)\n+16FEE Comment Length        0000 (0)\n+16FF0 Disk Start            0000 (0)\n+16FF2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+16FF4 Ext File Attributes   00000000 (0)\n+16FF8 Local Header Offset   0000FCA1 (64673)\n+16FFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16FFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17034 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17036   Length              0005 (5)\n+17038   Flags               01 (1) 'Modification'\n+17039   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1703D CENTRAL HEADER #30    02014B50 (33639248)\n+17041 Created Zip Spec      14 (20) '2.0'\n+17042 Created OS            00 (0) 'MS-DOS'\n+17043 Extract Zip Spec      14 (20) '2.0'\n+17044 Extract OS            00 (0) 'MS-DOS'\n+17045 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+17047 Compression Method    0000 (0) 'Stored'\n+17049 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1704D CRC                   FBA20F3E (4221701950)\n+17051 Compressed Size       0000069F (1695)\n+17055 Uncompressed Size     0000069F (1695)\n+17059 Filename Length       0034 (52)\n+1705B Extra Length          0009 (9)\n+1705D Comment Length        0000 (0)\n+1705F Disk Start            0000 (0)\n+17061 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+17063 Ext File Attributes   00000000 (0)\n+17067 Local Header Offset   000124AF (74927)\n+1706B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1706B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1709F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+170A1   Length              0005 (5)\n+170A3   Flags               01 (1) 'Modification'\n+170A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+170A8 CENTRAL HEADER #31    02014B50 (33639248)\n+170AC Created Zip Spec      14 (20) '2.0'\n+170AD Created OS            00 (0) 'MS-DOS'\n+170AE Extract Zip Spec      14 (20) '2.0'\n+170AF Extract OS            00 (0) 'MS-DOS'\n+170B0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+170B2 Compression Method    0000 (0) 'Stored'\n+170B4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+170B8 CRC                   6BB5A87E (1807067262)\n+170BC Compressed Size       00001101 (4353)\n+170C0 Uncompressed Size     00001101 (4353)\n+170C4 Filename Length       0035 (53)\n+170C6 Extra Length          0009 (9)\n+170C8 Comment Length        0000 (0)\n+170CA Disk Start            0000 (0)\n+170CC Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+170CE Ext File Attributes   00000000 (0)\n+170D2 Local Header Offset   00012BB9 (76729)\n+170D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x170D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1710B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1710D   Length              0005 (5)\n+1710F   Flags               01 (1) 'Modification'\n+17110   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+17114 CENTRAL HEADER #32    02014B50 (33639248)\n+17118 Created Zip Spec      14 (20) '2.0'\n+17119 Created OS            00 (0) 'MS-DOS'\n+1711A Extract Zip Spec      14 (20) '2.0'\n+1711B Extract OS            00 (0) 'MS-DOS'\n+1711C General Purpose Flag  0000 (0)\n+1711E Compression Method    0000 (0) 'Stored'\n+17120 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17124 CRC                   00000000 (0)\n+17128 Compressed Size       00000000 (0)\n+1712C Uncompressed Size     00000000 (0)\n+17130 Filename Length       0029 (41)\n+17132 Extra Length          0009 (9)\n+17134 Comment Length        0000 (0)\n+17136 Disk Start            0000 (0)\n+17138 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1713A Ext File Attributes   00000000 (0)\n+1713E Local Header Offset   00013D26 (81190)\n+17142 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x17142: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1716B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1716D   Length              0005 (5)\n+1716F   Flags               01 (1) 'Modification'\n+17170   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+17174 CENTRAL HEADER #33    02014B50 (33639248)\n+17178 Created Zip Spec      14 (20) '2.0'\n+17179 Created OS            00 (0) 'MS-DOS'\n+1717A Extract Zip Spec      14 (20) '2.0'\n+1717B Extract OS            00 (0) 'MS-DOS'\n+1717C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1717E Compression Method    0000 (0) 'Stored'\n+17180 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+17184 CRC                   B641845C (3057747036)\n+17188 Compressed Size       000010B7 (4279)\n+1718C Uncompressed Size     000010B7 (4279)\n+17190 Filename Length       0043 (67)\n+17192 Extra Length          0009 (9)\n+17194 Comment Length        0000 (0)\n+17196 Disk Start            0000 (0)\n+17198 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+1719A Ext File Attributes   00000000 (0)\n+1719E Local Header Offset   00013D76 (81270)\n+171A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x171A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+171E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+171E7   Length              0005 (5)\n+171E9   Flags               01 (1) 'Modification'\n+171EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+171EE CENTRAL HEADER #34    02014B50 (33639248)\n+171F2 Created Zip Spec      14 (20) '2.0'\n+171F3 Created OS            00 (0) 'MS-DOS'\n+171F4 Extract Zip Spec      14 (20) '2.0'\n+171F5 Extract OS            00 (0) 'MS-DOS'\n+171F6 General Purpose Flag  0000 (0)\n+171F8 Compression Method    0000 (0) 'Stored'\n+171FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+171FE CRC                   00000000 (0)\n+17202 Compressed Size       00000000 (0)\n+17206 Uncompressed Size     00000000 (0)\n+1720A Filename Length       0028 (40)\n+1720C Extra Length          0009 (9)\n+1720E Comment Length        0000 (0)\n+17210 Disk Start            0000 (0)\n+17212 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+17214 Ext File Attributes   00000000 (0)\n+17218 Local Header Offset   00014EA7 (85671)\n+1721C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1721C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17244 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17246   Length              0005 (5)\n+17248   Flags               01 (1) 'Modification'\n+17249   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1724D CENTRAL HEADER #35    02014B50 (33639248)\n+17251 Created Zip Spec      14 (20) '2.0'\n+17252 Created OS            00 (0) 'MS-DOS'\n+17253 Extract Zip Spec      14 (20) '2.0'\n+17254 Extract OS            00 (0) 'MS-DOS'\n+17255 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+17257 Compression Method    0000 (0) 'Stored'\n+17259 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1725D CRC                   021D9C13 (35494931)\n+17261 Compressed Size       00000951 (2385)\n+17265 Uncompressed Size     00000951 (2385)\n+17269 Filename Length       003F (63)\n+1726B Extra Length          0009 (9)\n+1726D Comment Length        0000 (0)\n+1726F Disk Start            0000 (0)\n+17271 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+17273 Ext File Attributes   00000000 (0)\n+17277 Local Header Offset   00014EF6 (85750)\n+1727B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1727B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+172BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+172BC   Length              0005 (5)\n+172BE   Flags               01 (1) 'Modification'\n+172BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+172C3 CENTRAL HEADER #36    02014B50 (33639248)\n+172C7 Created Zip Spec      14 (20) '2.0'\n+172C8 Created OS            00 (0) 'MS-DOS'\n+172C9 Extract Zip Spec      14 (20) '2.0'\n+172CA Extract OS            00 (0) 'MS-DOS'\n+172CB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+172CD Compression Method    0000 (0) 'Stored'\n+172CF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+172D3 CRC                   C419897B (3290007931)\n+172D7 Compressed Size       00000C66 (3174)\n+172DB Uncompressed Size     00000C66 (3174)\n+172DF Filename Length       004E (78)\n+172E1 Extra Length          0009 (9)\n+172E3 Comment Length        0000 (0)\n+172E5 Disk Start            0000 (0)\n+172E7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+172E9 Ext File Attributes   00000000 (0)\n+172ED Local Header Offset   000158BD (88253)\n+172F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x172F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1733F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17341   Length              0005 (5)\n+17343   Flags               01 (1) 'Modification'\n+17344   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+17348 END CENTRAL HEADER    06054B50 (101010256)\n+1734C Number of this disk   0000 (0)\n+1734E Central Dir Disk no   0000 (0)\n+17350 Entries in this disk  0024 (36)\n+17352 Total Entries         0024 (36)\n+17354 Size of Central Dir   00000DA0 (3488)\n+17358 Offset to Central Dir 000165A8 (91560)\n+1735C Comment Length        0000 (0)\n #\n # Warning Count: 72\n #\n # Done\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-rpc-thrift/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-rpc-thrift/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,201 +1,195 @@\n 00000000: 3c3f 786d 6c20 7665 7273 696f 6e3d 2231  <?xml version=\"1\n 00000010: 2e30 2220 656e 636f 6469 6e67 3d22 5554  .0\" encoding=\"UT\n-00000020: 462d 3822 3f3e 0d0a 3c21 2d2d 0d0a 2020  F-8\"?>..<!--..  \n-00000030: 4c69 6365 6e73 6564 2074 6f20 7468 6520  Licensed to the \n-00000040: 4170 6163 6865 2053 6f66 7477 6172 6520  Apache Software \n-00000050: 466f 756e 6461 7469 6f6e 2028 4153 4629  Foundation (ASF)\n-00000060: 2075 6e64 6572 206f 6e65 206f 7220 6d6f   under one or mo\n-00000070: 7265 0d0a 2020 636f 6e74 7269 6275 746f  re..  contributo\n-00000080: 7220 6c69 6365 6e73 6520 6167 7265 656d  r license agreem\n-00000090: 656e 7473 2e20 2053 6565 2074 6865 204e  ents.  See the N\n-000000a0: 4f54 4943 4520 6669 6c65 2064 6973 7472  OTICE file distr\n-000000b0: 6962 7574 6564 2077 6974 680d 0a20 2074  ibuted with..  t\n-000000c0: 6869 7320 776f 726b 2066 6f72 2061 6464  his work for add\n-000000d0: 6974 696f 6e61 6c20 696e 666f 726d 6174  itional informat\n-000000e0: 696f 6e20 7265 6761 7264 696e 6720 636f  ion regarding co\n-000000f0: 7079 7269 6768 7420 6f77 6e65 7273 6869  pyright ownershi\n-00000100: 702e 0d0a 2020 5468 6520 4153 4620 6c69  p...  The ASF li\n-00000110: 6365 6e73 6573 2074 6869 7320 6669 6c65  censes this file\n-00000120: 2074 6f20 596f 7520 756e 6465 7220 7468   to You under th\n-00000130: 6520 4170 6163 6865 204c 6963 656e 7365  e Apache License\n-00000140: 2c20 5665 7273 696f 6e20 322e 300d 0a20  , Version 2.0.. \n-00000150: 2028 7468 6520 224c 6963 656e 7365 2229   (the \"License\")\n-00000160: 3b20 796f 7520 6d61 7920 6e6f 7420 7573  ; you may not us\n-00000170: 6520 7468 6973 2066 696c 6520 6578 6365  e this file exce\n-00000180: 7074 2069 6e20 636f 6d70 6c69 616e 6365  pt in compliance\n-00000190: 2077 6974 680d 0a20 2074 6865 204c 6963   with..  the Lic\n-000001a0: 656e 7365 2e20 2059 6f75 206d 6179 206f  ense.  You may o\n-000001b0: 6274 6169 6e20 6120 636f 7079 206f 6620  btain a copy of \n-000001c0: 7468 6520 4c69 6365 6e73 6520 6174 0d0a  the License at..\n-000001d0: 0d0a 2020 2020 2020 6874 7470 3a2f 2f77  ..      http://w\n-000001e0: 7777 2e61 7061 6368 652e 6f72 672f 6c69  ww.apache.org/li\n-000001f0: 6365 6e73 6573 2f4c 4943 454e 5345 2d32  censes/LICENSE-2\n-00000200: 2e30 0d0a 0d0a 2020 556e 6c65 7373 2072  .0....  Unless r\n-00000210: 6571 7569 7265 6420 6279 2061 7070 6c69  equired by appli\n-00000220: 6361 626c 6520 6c61 7720 6f72 2061 6772  cable law or agr\n-00000230: 6565 6420 746f 2069 6e20 7772 6974 696e  eed to in writin\n-00000240: 672c 2073 6f66 7477 6172 650d 0a20 2064  g, software..  d\n-00000250: 6973 7472 6962 7574 6564 2075 6e64 6572  istributed under\n-00000260: 2074 6865 204c 6963 656e 7365 2069 7320   the License is \n-00000270: 6469 7374 7269 6275 7465 6420 6f6e 2061  distributed on a\n-00000280: 6e20 2241 5320 4953 2220 4241 5349 532c  n \"AS IS\" BASIS,\n-00000290: 0d0a 2020 5749 5448 4f55 5420 5741 5252  ..  WITHOUT WARR\n-000002a0: 414e 5449 4553 204f 5220 434f 4e44 4954  ANTIES OR CONDIT\n-000002b0: 494f 4e53 204f 4620 414e 5920 4b49 4e44  IONS OF ANY KIND\n-000002c0: 2c20 6569 7468 6572 2065 7870 7265 7373  , either express\n-000002d0: 206f 7220 696d 706c 6965 642e 0d0a 2020   or implied...  \n-000002e0: 5365 6520 7468 6520 4c69 6365 6e73 6520  See the License \n-000002f0: 666f 7220 7468 6520 7370 6563 6966 6963  for the specific\n-00000300: 206c 616e 6775 6167 6520 676f 7665 726e   language govern\n-00000310: 696e 6720 7065 726d 6973 7369 6f6e 7320  ing permissions \n-00000320: 616e 640d 0a20 206c 696d 6974 6174 696f  and..  limitatio\n-00000330: 6e73 2075 6e64 6572 2074 6865 204c 6963  ns under the Lic\n-00000340: 656e 7365 2e0d 0a20 202d 2d3e 0d0a 3c70  ense...  -->..<p\n-00000350: 726f 6a65 6374 2078 7369 3a73 6368 656d  roject xsi:schem\n-00000360: 614c 6f63 6174 696f 6e3d 2268 7474 703a  aLocation=\"http:\n-00000370: 2f2f 6d61 7665 6e2e 6170 6163 6865 2e6f  //maven.apache.o\n-00000380: 7267 2f50 4f4d 2f34 2e30 2e30 2068 7474  rg/POM/4.0.0 htt\n-00000390: 7073 3a2f 2f6d 6176 656e 2e61 7061 6368  ps://maven.apach\n-000003a0: 652e 6f72 672f 7873 642f 6d61 7665 6e2d  e.org/xsd/maven-\n-000003b0: 342e 302e 302e 7873 6422 2078 6d6c 6e73  4.0.0.xsd\" xmlns\n-000003c0: 3d22 6874 7470 3a2f 2f6d 6176 656e 2e61  =\"http://maven.a\n-000003d0: 7061 6368 652e 6f72 672f 504f 4d2f 342e  pache.org/POM/4.\n-000003e0: 302e 3022 0d0a 2020 2020 786d 6c6e 733a  0.0\"..    xmlns:\n-000003f0: 7873 693d 2268 7474 703a 2f2f 7777 772e  xsi=\"http://www.\n-00000400: 7733 2e6f 7267 2f32 3030 312f 584d 4c53  w3.org/2001/XMLS\n-00000410: 6368 656d 612d 696e 7374 616e 6365 223e  chema-instance\">\n-00000420: 0d0a 2020 3c6d 6f64 656c 5665 7273 696f  ..  <modelVersio\n-00000430: 6e3e 342e 302e 303c 2f6d 6f64 656c 5665  n>4.0.0</modelVe\n-00000440: 7273 696f 6e3e 0d0a 2020 3c70 6172 656e  rsion>..  <paren\n-00000450: 743e 0d0a 2020 2020 3c67 726f 7570 4964  t>..    <groupId\n-00000460: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n-00000470: 6f3c 2f67 726f 7570 4964 3e0d 0a20 2020  o</groupId>..   \n-00000480: 203c 6172 7469 6661 6374 4964 3e64 7562   <artifactId>dub\n-00000490: 626f 2d72 7063 3c2f 6172 7469 6661 6374  bo-rpc</artifact\n-000004a0: 4964 3e0d 0a20 2020 203c 7665 7273 696f  Id>..    <versio\n-000004b0: 6e3e 322e 372e 3130 3c2f 7665 7273 696f  n>2.7.10</versio\n-000004c0: 6e3e 0d0a 2020 3c2f 7061 7265 6e74 3e0d  n>..  </parent>.\n-000004d0: 0a20 203c 6772 6f75 7049 643e 6f72 672e  .  <groupId>org.\n-000004e0: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n-000004f0: 6f75 7049 643e 0d0a 2020 3c61 7274 6966  oupId>..  <artif\n-00000500: 6163 7449 643e 6475 6262 6f2d 7270 632d  actId>dubbo-rpc-\n-00000510: 7468 7269 6674 3c2f 6172 7469 6661 6374  thrift</artifact\n-00000520: 4964 3e0d 0a20 203c 7665 7273 696f 6e3e  Id>..  <version>\n-00000530: 322e 372e 3130 3c2f 7665 7273 696f 6e3e  2.7.10</version>\n-00000540: 0d0a 2020 3c6e 616d 653e 247b 7072 6f6a  ..  <name>${proj\n-00000550: 6563 742e 6172 7469 6661 6374 4964 7d3c  ect.artifactId}<\n-00000560: 2f6e 616d 653e 0d0a 2020 3c64 6573 6372  /name>..  <descr\n-00000570: 6970 7469 6f6e 3e54 6865 2074 6872 6966  iption>The thrif\n-00000580: 7420 7270 6320 6d6f 6475 6c65 206f 6620  t rpc module of \n-00000590: 6475 6262 6f20 7072 6f6a 6563 743c 2f64  dubbo project</d\n-000005a0: 6573 6372 6970 7469 6f6e 3e0d 0a20 203c  escription>..  <\n-000005b0: 6c69 6365 6e73 6573 3e0d 0a20 2020 203c  licenses>..    <\n-000005c0: 6c69 6365 6e73 653e 0d0a 2020 2020 2020  license>..      \n-000005d0: 3c6e 616d 653e 4170 6163 6865 204c 6963  <name>Apache Lic\n-000005e0: 656e 7365 2c20 5665 7273 696f 6e20 322e  ense, Version 2.\n-000005f0: 303c 2f6e 616d 653e 0d0a 2020 2020 2020  0</name>..      \n-00000600: 3c75 726c 3e68 7474 703a 2f2f 7777 772e  <url>http://www.\n-00000610: 6170 6163 6865 2e6f 7267 2f6c 6963 656e  apache.org/licen\n-00000620: 7365 732f 4c49 4345 4e53 452d 322e 303c  ses/LICENSE-2.0<\n-00000630: 2f75 726c 3e0d 0a20 2020 2020 203c 6469  /url>..      <di\n-00000640: 7374 7269 6275 7469 6f6e 3e72 6570 6f3c  stribution>repo<\n-00000650: 2f64 6973 7472 6962 7574 696f 6e3e 0d0a  /distribution>..\n-00000660: 2020 2020 3c2f 6c69 6365 6e73 653e 0d0a      </license>..\n-00000670: 2020 3c2f 6c69 6365 6e73 6573 3e0d 0a20    </licenses>.. \n-00000680: 203c 7072 6f70 6572 7469 6573 3e0d 0a20   <properties>.. \n-00000690: 2020 203c 736b 6970 5f6d 6176 656e 5f64     <skip_maven_d\n-000006a0: 6570 6c6f 793e 6661 6c73 653c 2f73 6b69  eploy>false</ski\n-000006b0: 705f 6d61 7665 6e5f 6465 706c 6f79 3e0d  p_maven_deploy>.\n-000006c0: 0a20 203c 2f70 726f 7065 7274 6965 733e  .  </properties>\n-000006d0: 0d0a 2020 3c64 6570 656e 6465 6e63 6965  ..  <dependencie\n-000006e0: 733e 0d0a 2020 2020 3c64 6570 656e 6465  s>..    <depende\n-000006f0: 6e63 793e 0d0a 2020 2020 2020 3c67 726f  ncy>..      <gro\n-00000700: 7570 4964 3e6f 7267 2e61 7061 6368 652e  upId>org.apache.\n-00000710: 6475 6262 6f3c 2f67 726f 7570 4964 3e0d  dubbo</groupId>.\n-00000720: 0a20 2020 2020 203c 6172 7469 6661 6374  .      <artifact\n-00000730: 4964 3e64 7562 626f 2d72 7063 2d61 7069  Id>dubbo-rpc-api\n-00000740: 3c2f 6172 7469 6661 6374 4964 3e0d 0a20  </artifactId>.. \n-00000750: 2020 2020 203c 7665 7273 696f 6e3e 247b       <version>${\n-00000760: 7072 6f6a 6563 742e 7061 7265 6e74 2e76  project.parent.v\n-00000770: 6572 7369 6f6e 7d3c 2f76 6572 7369 6f6e  ersion}</version\n-00000780: 3e0d 0a20 2020 203c 2f64 6570 656e 6465  >..    </depende\n-00000790: 6e63 793e 0d0a 2020 2020 3c64 6570 656e  ncy>..    <depen\n-000007a0: 6465 6e63 793e 0d0a 2020 2020 2020 3c67  dency>..      <g\n-000007b0: 726f 7570 4964 3e6f 7267 2e61 7061 6368  roupId>org.apach\n-000007c0: 652e 6475 6262 6f3c 2f67 726f 7570 4964  e.dubbo</groupId\n-000007d0: 3e0d 0a20 2020 2020 203c 6172 7469 6661  >..      <artifa\n-000007e0: 6374 4964 3e64 7562 626f 2d72 7063 2d64  ctId>dubbo-rpc-d\n-000007f0: 7562 626f 3c2f 6172 7469 6661 6374 4964  ubbo</artifactId\n-00000800: 3e0d 0a20 2020 2020 203c 7665 7273 696f  >..      <versio\n-00000810: 6e3e 247b 7072 6f6a 6563 742e 7061 7265  n>${project.pare\n-00000820: 6e74 2e76 6572 7369 6f6e 7d3c 2f76 6572  nt.version}</ver\n-00000830: 7369 6f6e 3e0d 0a20 2020 203c 2f64 6570  sion>..    </dep\n-00000840: 656e 6465 6e63 793e 0d0a 2020 2020 3c64  endency>..    <d\n-00000850: 6570 656e 6465 6e63 793e 0d0a 2020 2020  ependency>..    \n-00000860: 2020 3c67 726f 7570 4964 3e6f 7267 2e61    <groupId>org.a\n-00000870: 7061 6368 652e 6475 6262 6f3c 2f67 726f  pache.dubbo</gro\n-00000880: 7570 4964 3e0d 0a20 2020 2020 203c 6172  upId>..      <ar\n-00000890: 7469 6661 6374 4964 3e64 7562 626f 2d72  tifactId>dubbo-r\n-000008a0: 656d 6f74 696e 672d 6170 693c 2f61 7274  emoting-api</art\n-000008b0: 6966 6163 7449 643e 0d0a 2020 2020 2020  ifactId>..      \n-000008c0: 3c76 6572 7369 6f6e 3e24 7b70 726f 6a65  <version>${proje\n-000008d0: 6374 2e70 6172 656e 742e 7665 7273 696f  ct.parent.versio\n-000008e0: 6e7d 3c2f 7665 7273 696f 6e3e 0d0a 2020  n}</version>..  \n-000008f0: 2020 3c2f 6465 7065 6e64 656e 6379 3e0d    </dependency>.\n-00000900: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n-00000910: 3e0d 0a20 2020 2020 203c 6772 6f75 7049  >..      <groupI\n-00000920: 643e 6f72 672e 6170 6163 6865 2e64 7562  d>org.apache.dub\n-00000930: 626f 3c2f 6772 6f75 7049 643e 0d0a 2020  bo</groupId>..  \n-00000940: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n-00000950: 6475 6262 6f2d 7265 6d6f 7469 6e67 2d6e  dubbo-remoting-n\n-00000960: 6574 7479 343c 2f61 7274 6966 6163 7449  etty4</artifactI\n-00000970: 643e 0d0a 2020 2020 2020 3c76 6572 7369  d>..      <versi\n-00000980: 6f6e 3e24 7b70 726f 6a65 6374 2e70 6172  on>${project.par\n-00000990: 656e 742e 7665 7273 696f 6e7d 3c2f 7665  ent.version}</ve\n-000009a0: 7273 696f 6e3e 0d0a 2020 2020 3c2f 6465  rsion>..    </de\n-000009b0: 7065 6e64 656e 6379 3e0d 0a20 2020 203c  pendency>..    <\n-000009c0: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-000009d0: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n-000009e0: 6170 6163 6865 2e74 6872 6966 743c 2f67  apache.thrift</g\n-000009f0: 726f 7570 4964 3e0d 0a20 2020 2020 203c  roupId>..      <\n-00000a00: 6172 7469 6661 6374 4964 3e6c 6962 7468  artifactId>libth\n-00000a10: 7269 6674 3c2f 6172 7469 6661 6374 4964  rift</artifactId\n-00000a20: 3e0d 0a20 2020 203c 2f64 6570 656e 6465  >..    </depende\n-00000a30: 6e63 793e 0d0a 2020 2020 3c64 6570 656e  ncy>..    <depen\n-00000a40: 6465 6e63 793e 0d0a 2020 2020 2020 3c67  dency>..      <g\n-00000a50: 726f 7570 4964 3e6f 7267 2e73 7072 696e  roupId>org.sprin\n-00000a60: 6766 7261 6d65 776f 726b 3c2f 6772 6f75  gframework</grou\n-00000a70: 7049 643e 0d0a 2020 2020 2020 3c61 7274  pId>..      <art\n-00000a80: 6966 6163 7449 643e 7370 7269 6e67 2d63  ifactId>spring-c\n-00000a90: 6f6e 7465 7874 3c2f 6172 7469 6661 6374  ontext</artifact\n-00000aa0: 4964 3e0d 0a20 2020 203c 2f64 6570 656e  Id>..    </depen\n-00000ab0: 6465 6e63 793e 0d0a 2020 2020 3c64 6570  dency>..    <dep\n-00000ac0: 656e 6465 6e63 793e 0d0a 2020 2020 2020  endency>..      \n-00000ad0: 3c67 726f 7570 4964 3e6f 7267 2e61 7061  <groupId>org.apa\n-00000ae0: 6368 652e 6475 6262 6f3c 2f67 726f 7570  che.dubbo</group\n-00000af0: 4964 3e0d 0a20 2020 2020 203c 6172 7469  Id>..      <arti\n-00000b00: 6661 6374 4964 3e64 7562 626f 2d63 6f6e  factId>dubbo-con\n-00000b10: 6669 672d 7370 7269 6e67 3c2f 6172 7469  fig-spring</arti\n-00000b20: 6661 6374 4964 3e0d 0a20 2020 2020 203c  factId>..      <\n-00000b30: 7665 7273 696f 6e3e 247b 7072 6f6a 6563  version>${projec\n-00000b40: 742e 7061 7265 6e74 2e76 6572 7369 6f6e  t.parent.version\n-00000b50: 7d3c 2f76 6572 7369 6f6e 3e0d 0a20 2020  }</version>..   \n-00000b60: 2020 203c 7363 6f70 653e 7465 7374 3c2f     <scope>test</\n-00000b70: 7363 6f70 653e 0d0a 2020 2020 3c2f 6465  scope>..    </de\n-00000b80: 7065 6e64 656e 6379 3e0d 0a20 2020 203c  pendency>..    <\n-00000b90: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-00000ba0: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n-00000bb0: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n-00000bc0: 6f75 7049 643e 0d0a 2020 2020 2020 3c61  oupId>..      <a\n-00000bd0: 7274 6966 6163 7449 643e 6475 6262 6f2d  rtifactId>dubbo-\n-00000be0: 7265 6769 7374 7279 2d6d 756c 7469 6361  registry-multica\n-00000bf0: 7374 3c2f 6172 7469 6661 6374 4964 3e0d  st</artifactId>.\n-00000c00: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n-00000c10: 247b 7072 6f6a 6563 742e 7061 7265 6e74  ${project.parent\n-00000c20: 2e76 6572 7369 6f6e 7d3c 2f76 6572 7369  .version}</versi\n-00000c30: 6f6e 3e0d 0a20 2020 2020 203c 7363 6f70  on>..      <scop\n-00000c40: 653e 7465 7374 3c2f 7363 6f70 653e 0d0a  e>test</scope>..\n-00000c50: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n-00000c60: 3e0d 0a20 203c 2f64 6570 656e 6465 6e63  >..  </dependenc\n-00000c70: 6965 733e 0d0a 3c2f 7072 6f6a 6563 743e  ies>..</project>\n-00000c80: 0d0a                                     ..\n+00000020: 462d 3822 3f3e 0a3c 212d 2d0a 2020 4c69  F-8\"?>.<!--.  Li\n+00000030: 6365 6e73 6564 2074 6f20 7468 6520 4170  censed to the Ap\n+00000040: 6163 6865 2053 6f66 7477 6172 6520 466f  ache Software Fo\n+00000050: 756e 6461 7469 6f6e 2028 4153 4629 2075  undation (ASF) u\n+00000060: 6e64 6572 206f 6e65 206f 7220 6d6f 7265  nder one or more\n+00000070: 0a20 2063 6f6e 7472 6962 7574 6f72 206c  .  contributor l\n+00000080: 6963 656e 7365 2061 6772 6565 6d65 6e74  icense agreement\n+00000090: 732e 2020 5365 6520 7468 6520 4e4f 5449  s.  See the NOTI\n+000000a0: 4345 2066 696c 6520 6469 7374 7269 6275  CE file distribu\n+000000b0: 7465 6420 7769 7468 0a20 2074 6869 7320  ted with.  this \n+000000c0: 776f 726b 2066 6f72 2061 6464 6974 696f  work for additio\n+000000d0: 6e61 6c20 696e 666f 726d 6174 696f 6e20  nal information \n+000000e0: 7265 6761 7264 696e 6720 636f 7079 7269  regarding copyri\n+000000f0: 6768 7420 6f77 6e65 7273 6869 702e 0a20  ght ownership.. \n+00000100: 2054 6865 2041 5346 206c 6963 656e 7365   The ASF license\n+00000110: 7320 7468 6973 2066 696c 6520 746f 2059  s this file to Y\n+00000120: 6f75 2075 6e64 6572 2074 6865 2041 7061  ou under the Apa\n+00000130: 6368 6520 4c69 6365 6e73 652c 2056 6572  che License, Ver\n+00000140: 7369 6f6e 2032 2e30 0a20 2028 7468 6520  sion 2.0.  (the \n+00000150: 224c 6963 656e 7365 2229 3b20 796f 7520  \"License\"); you \n+00000160: 6d61 7920 6e6f 7420 7573 6520 7468 6973  may not use this\n+00000170: 2066 696c 6520 6578 6365 7074 2069 6e20   file except in \n+00000180: 636f 6d70 6c69 616e 6365 2077 6974 680a  compliance with.\n+00000190: 2020 7468 6520 4c69 6365 6e73 652e 2020    the License.  \n+000001a0: 596f 7520 6d61 7920 6f62 7461 696e 2061  You may obtain a\n+000001b0: 2063 6f70 7920 6f66 2074 6865 204c 6963   copy of the Lic\n+000001c0: 656e 7365 2061 740a 0a20 2020 2020 2068  ense at..      h\n+000001d0: 7474 703a 2f2f 7777 772e 6170 6163 6865  ttp://www.apache\n+000001e0: 2e6f 7267 2f6c 6963 656e 7365 732f 4c49  .org/licenses/LI\n+000001f0: 4345 4e53 452d 322e 300a 0a20 2055 6e6c  CENSE-2.0..  Unl\n+00000200: 6573 7320 7265 7175 6972 6564 2062 7920  ess required by \n+00000210: 6170 706c 6963 6162 6c65 206c 6177 206f  applicable law o\n+00000220: 7220 6167 7265 6564 2074 6f20 696e 2077  r agreed to in w\n+00000230: 7269 7469 6e67 2c20 736f 6674 7761 7265  riting, software\n+00000240: 0a20 2064 6973 7472 6962 7574 6564 2075  .  distributed u\n+00000250: 6e64 6572 2074 6865 204c 6963 656e 7365  nder the License\n+00000260: 2069 7320 6469 7374 7269 6275 7465 6420   is distributed \n+00000270: 6f6e 2061 6e20 2241 5320 4953 2220 4241  on an \"AS IS\" BA\n+00000280: 5349 532c 0a20 2057 4954 484f 5554 2057  SIS,.  WITHOUT W\n+00000290: 4152 5241 4e54 4945 5320 4f52 2043 4f4e  ARRANTIES OR CON\n+000002a0: 4449 5449 4f4e 5320 4f46 2041 4e59 204b  DITIONS OF ANY K\n+000002b0: 494e 442c 2065 6974 6865 7220 6578 7072  IND, either expr\n+000002c0: 6573 7320 6f72 2069 6d70 6c69 6564 2e0a  ess or implied..\n+000002d0: 2020 5365 6520 7468 6520 4c69 6365 6e73    See the Licens\n+000002e0: 6520 666f 7220 7468 6520 7370 6563 6966  e for the specif\n+000002f0: 6963 206c 616e 6775 6167 6520 676f 7665  ic language gove\n+00000300: 726e 696e 6720 7065 726d 6973 7369 6f6e  rning permission\n+00000310: 7320 616e 640a 2020 6c69 6d69 7461 7469  s and.  limitati\n+00000320: 6f6e 7320 756e 6465 7220 7468 6520 4c69  ons under the Li\n+00000330: 6365 6e73 652e 0a20 202d 2d3e 0a3c 7072  cense..  -->.<pr\n+00000340: 6f6a 6563 7420 7873 693a 7363 6865 6d61  oject xsi:schema\n+00000350: 4c6f 6361 7469 6f6e 3d22 6874 7470 3a2f  Location=\"http:/\n+00000360: 2f6d 6176 656e 2e61 7061 6368 652e 6f72  /maven.apache.or\n+00000370: 672f 504f 4d2f 342e 302e 3020 6874 7470  g/POM/4.0.0 http\n+00000380: 733a 2f2f 6d61 7665 6e2e 6170 6163 6865  s://maven.apache\n+00000390: 2e6f 7267 2f78 7364 2f6d 6176 656e 2d34  .org/xsd/maven-4\n+000003a0: 2e30 2e30 2e78 7364 2220 786d 6c6e 733d  .0.0.xsd\" xmlns=\n+000003b0: 2268 7474 703a 2f2f 6d61 7665 6e2e 6170  \"http://maven.ap\n+000003c0: 6163 6865 2e6f 7267 2f50 4f4d 2f34 2e30  ache.org/POM/4.0\n+000003d0: 2e30 220a 2020 2020 786d 6c6e 733a 7873  .0\".    xmlns:xs\n+000003e0: 693d 2268 7474 703a 2f2f 7777 772e 7733  i=\"http://www.w3\n+000003f0: 2e6f 7267 2f32 3030 312f 584d 4c53 6368  .org/2001/XMLSch\n+00000400: 656d 612d 696e 7374 616e 6365 223e 0a20  ema-instance\">. \n+00000410: 203c 6d6f 6465 6c56 6572 7369 6f6e 3e34   <modelVersion>4\n+00000420: 2e30 2e30 3c2f 6d6f 6465 6c56 6572 7369  .0.0</modelVersi\n+00000430: 6f6e 3e0a 2020 3c70 6172 656e 743e 0a20  on>.  <parent>. \n+00000440: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00000450: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n+00000460: 6f75 7049 643e 0a20 2020 203c 6172 7469  oupId>.    <arti\n+00000470: 6661 6374 4964 3e64 7562 626f 2d72 7063  factId>dubbo-rpc\n+00000480: 3c2f 6172 7469 6661 6374 4964 3e0a 2020  </artifactId>.  \n+00000490: 2020 3c76 6572 7369 6f6e 3e32 2e37 2e31    <version>2.7.1\n+000004a0: 303c 2f76 6572 7369 6f6e 3e0a 2020 3c2f  0</version>.  </\n+000004b0: 7061 7265 6e74 3e0a 2020 3c67 726f 7570  parent>.  <group\n+000004c0: 4964 3e6f 7267 2e61 7061 6368 652e 6475  Id>org.apache.du\n+000004d0: 6262 6f3c 2f67 726f 7570 4964 3e0a 2020  bbo</groupId>.  \n+000004e0: 3c61 7274 6966 6163 7449 643e 6475 6262  <artifactId>dubb\n+000004f0: 6f2d 7270 632d 7468 7269 6674 3c2f 6172  o-rpc-thrift</ar\n+00000500: 7469 6661 6374 4964 3e0a 2020 3c76 6572  tifactId>.  <ver\n+00000510: 7369 6f6e 3e32 2e37 2e31 303c 2f76 6572  sion>2.7.10</ver\n+00000520: 7369 6f6e 3e0a 2020 3c6e 616d 653e 247b  sion>.  <name>${\n+00000530: 7072 6f6a 6563 742e 6172 7469 6661 6374  project.artifact\n+00000540: 4964 7d3c 2f6e 616d 653e 0a20 203c 6465  Id}</name>.  <de\n+00000550: 7363 7269 7074 696f 6e3e 5468 6520 7468  scription>The th\n+00000560: 7269 6674 2072 7063 206d 6f64 756c 6520  rift rpc module \n+00000570: 6f66 2064 7562 626f 2070 726f 6a65 6374  of dubbo project\n+00000580: 3c2f 6465 7363 7269 7074 696f 6e3e 0a20  </description>. \n+00000590: 203c 6c69 6365 6e73 6573 3e0a 2020 2020   <licenses>.    \n+000005a0: 3c6c 6963 656e 7365 3e0a 2020 2020 2020  <license>.      \n+000005b0: 3c6e 616d 653e 4170 6163 6865 204c 6963  <name>Apache Lic\n+000005c0: 656e 7365 2c20 5665 7273 696f 6e20 322e  ense, Version 2.\n+000005d0: 303c 2f6e 616d 653e 0a20 2020 2020 203c  0</name>.      <\n+000005e0: 7572 6c3e 6874 7470 3a2f 2f77 7777 2e61  url>http://www.a\n+000005f0: 7061 6368 652e 6f72 672f 6c69 6365 6e73  pache.org/licens\n+00000600: 6573 2f4c 4943 454e 5345 2d32 2e30 3c2f  es/LICENSE-2.0</\n+00000610: 7572 6c3e 0a20 2020 2020 203c 6469 7374  url>.      <dist\n+00000620: 7269 6275 7469 6f6e 3e72 6570 6f3c 2f64  ribution>repo</d\n+00000630: 6973 7472 6962 7574 696f 6e3e 0a20 2020  istribution>.   \n+00000640: 203c 2f6c 6963 656e 7365 3e0a 2020 3c2f   </license>.  </\n+00000650: 6c69 6365 6e73 6573 3e0a 2020 3c70 726f  licenses>.  <pro\n+00000660: 7065 7274 6965 733e 0a20 2020 203c 736b  perties>.    <sk\n+00000670: 6970 5f6d 6176 656e 5f64 6570 6c6f 793e  ip_maven_deploy>\n+00000680: 6661 6c73 653c 2f73 6b69 705f 6d61 7665  false</skip_mave\n+00000690: 6e5f 6465 706c 6f79 3e0a 2020 3c2f 7072  n_deploy>.  </pr\n+000006a0: 6f70 6572 7469 6573 3e0a 2020 3c64 6570  operties>.  <dep\n+000006b0: 656e 6465 6e63 6965 733e 0a20 2020 203c  endencies>.    <\n+000006c0: 6465 7065 6e64 656e 6379 3e0a 2020 2020  dependency>.    \n+000006d0: 2020 3c67 726f 7570 4964 3e6f 7267 2e61    <groupId>org.a\n+000006e0: 7061 6368 652e 6475 6262 6f3c 2f67 726f  pache.dubbo</gro\n+000006f0: 7570 4964 3e0a 2020 2020 2020 3c61 7274  upId>.      <art\n+00000700: 6966 6163 7449 643e 6475 6262 6f2d 7270  ifactId>dubbo-rp\n+00000710: 632d 6170 693c 2f61 7274 6966 6163 7449  c-api</artifactI\n+00000720: 643e 0a20 2020 2020 203c 7665 7273 696f  d>.      <versio\n+00000730: 6e3e 247b 7072 6f6a 6563 742e 7061 7265  n>${project.pare\n+00000740: 6e74 2e76 6572 7369 6f6e 7d3c 2f76 6572  nt.version}</ver\n+00000750: 7369 6f6e 3e0a 2020 2020 3c2f 6465 7065  sion>.    </depe\n+00000760: 6e64 656e 6379 3e0a 2020 2020 3c64 6570  ndency>.    <dep\n+00000770: 656e 6465 6e63 793e 0a20 2020 2020 203c  endency>.      <\n+00000780: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n+00000790: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n+000007a0: 643e 0a20 2020 2020 203c 6172 7469 6661  d>.      <artifa\n+000007b0: 6374 4964 3e64 7562 626f 2d72 7063 2d64  ctId>dubbo-rpc-d\n+000007c0: 7562 626f 3c2f 6172 7469 6661 6374 4964  ubbo</artifactId\n+000007d0: 3e0a 2020 2020 2020 3c76 6572 7369 6f6e  >.      <version\n+000007e0: 3e24 7b70 726f 6a65 6374 2e70 6172 656e  >${project.paren\n+000007f0: 742e 7665 7273 696f 6e7d 3c2f 7665 7273  t.version}</vers\n+00000800: 696f 6e3e 0a20 2020 203c 2f64 6570 656e  ion>.    </depen\n+00000810: 6465 6e63 793e 0a20 2020 203c 6465 7065  dency>.    <depe\n+00000820: 6e64 656e 6379 3e0a 2020 2020 2020 3c67  ndency>.      <g\n+00000830: 726f 7570 4964 3e6f 7267 2e61 7061 6368  roupId>org.apach\n+00000840: 652e 6475 6262 6f3c 2f67 726f 7570 4964  e.dubbo</groupId\n+00000850: 3e0a 2020 2020 2020 3c61 7274 6966 6163  >.      <artifac\n+00000860: 7449 643e 6475 6262 6f2d 7265 6d6f 7469  tId>dubbo-remoti\n+00000870: 6e67 2d61 7069 3c2f 6172 7469 6661 6374  ng-api</artifact\n+00000880: 4964 3e0a 2020 2020 2020 3c76 6572 7369  Id>.      <versi\n+00000890: 6f6e 3e24 7b70 726f 6a65 6374 2e70 6172  on>${project.par\n+000008a0: 656e 742e 7665 7273 696f 6e7d 3c2f 7665  ent.version}</ve\n+000008b0: 7273 696f 6e3e 0a20 2020 203c 2f64 6570  rsion>.    </dep\n+000008c0: 656e 6465 6e63 793e 0a20 2020 203c 6465  endency>.    <de\n+000008d0: 7065 6e64 656e 6379 3e0a 2020 2020 2020  pendency>.      \n+000008e0: 3c67 726f 7570 4964 3e6f 7267 2e61 7061  <groupId>org.apa\n+000008f0: 6368 652e 6475 6262 6f3c 2f67 726f 7570  che.dubbo</group\n+00000900: 4964 3e0a 2020 2020 2020 3c61 7274 6966  Id>.      <artif\n+00000910: 6163 7449 643e 6475 6262 6f2d 7265 6d6f  actId>dubbo-remo\n+00000920: 7469 6e67 2d6e 6574 7479 343c 2f61 7274  ting-netty4</art\n+00000930: 6966 6163 7449 643e 0a20 2020 2020 203c  ifactId>.      <\n+00000940: 7665 7273 696f 6e3e 247b 7072 6f6a 6563  version>${projec\n+00000950: 742e 7061 7265 6e74 2e76 6572 7369 6f6e  t.parent.version\n+00000960: 7d3c 2f76 6572 7369 6f6e 3e0a 2020 2020  }</version>.    \n+00000970: 3c2f 6465 7065 6e64 656e 6379 3e0a 2020  </dependency>.  \n+00000980: 2020 3c64 6570 656e 6465 6e63 793e 0a20    <dependency>. \n+00000990: 2020 2020 203c 6772 6f75 7049 643e 6f72       <groupId>or\n+000009a0: 672e 6170 6163 6865 2e74 6872 6966 743c  g.apache.thrift<\n+000009b0: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+000009c0: 3c61 7274 6966 6163 7449 643e 6c69 6274  <artifactId>libt\n+000009d0: 6872 6966 743c 2f61 7274 6966 6163 7449  hrift</artifactI\n+000009e0: 643e 0a20 2020 203c 2f64 6570 656e 6465  d>.    </depende\n+000009f0: 6e63 793e 0a20 2020 203c 6465 7065 6e64  ncy>.    <depend\n+00000a00: 656e 6379 3e0a 2020 2020 2020 3c67 726f  ency>.      <gro\n+00000a10: 7570 4964 3e6f 7267 2e73 7072 696e 6766  upId>org.springf\n+00000a20: 7261 6d65 776f 726b 3c2f 6772 6f75 7049  ramework</groupI\n+00000a30: 643e 0a20 2020 2020 203c 6172 7469 6661  d>.      <artifa\n+00000a40: 6374 4964 3e73 7072 696e 672d 636f 6e74  ctId>spring-cont\n+00000a50: 6578 743c 2f61 7274 6966 6163 7449 643e  ext</artifactId>\n+00000a60: 0a20 2020 203c 2f64 6570 656e 6465 6e63  .    </dependenc\n+00000a70: 793e 0a20 2020 203c 6465 7065 6e64 656e  y>.    <dependen\n+00000a80: 6379 3e0a 2020 2020 2020 3c67 726f 7570  cy>.      <group\n+00000a90: 4964 3e6f 7267 2e61 7061 6368 652e 6475  Id>org.apache.du\n+00000aa0: 6262 6f3c 2f67 726f 7570 4964 3e0a 2020  bbo</groupId>.  \n+00000ab0: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n+00000ac0: 6475 6262 6f2d 636f 6e66 6967 2d73 7072  dubbo-config-spr\n+00000ad0: 696e 673c 2f61 7274 6966 6163 7449 643e  ing</artifactId>\n+00000ae0: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n+00000af0: 247b 7072 6f6a 6563 742e 7061 7265 6e74  ${project.parent\n+00000b00: 2e76 6572 7369 6f6e 7d3c 2f76 6572 7369  .version}</versi\n+00000b10: 6f6e 3e0a 2020 2020 2020 3c73 636f 7065  on>.      <scope\n+00000b20: 3e74 6573 743c 2f73 636f 7065 3e0a 2020  >test</scope>.  \n+00000b30: 2020 3c2f 6465 7065 6e64 656e 6379 3e0a    </dependency>.\n+00000b40: 2020 2020 3c64 6570 656e 6465 6e63 793e      <dependency>\n+00000b50: 0a20 2020 2020 203c 6772 6f75 7049 643e  .      <groupId>\n+00000b60: 6f72 672e 6170 6163 6865 2e64 7562 626f  org.apache.dubbo\n+00000b70: 3c2f 6772 6f75 7049 643e 0a20 2020 2020  </groupId>.     \n+00000b80: 203c 6172 7469 6661 6374 4964 3e64 7562   <artifactId>dub\n+00000b90: 626f 2d72 6567 6973 7472 792d 6d75 6c74  bo-registry-mult\n+00000ba0: 6963 6173 743c 2f61 7274 6966 6163 7449  icast</artifactI\n+00000bb0: 643e 0a20 2020 2020 203c 7665 7273 696f  d>.      <versio\n+00000bc0: 6e3e 247b 7072 6f6a 6563 742e 7061 7265  n>${project.pare\n+00000bd0: 6e74 2e76 6572 7369 6f6e 7d3c 2f76 6572  nt.version}</ver\n+00000be0: 7369 6f6e 3e0a 2020 2020 2020 3c73 636f  sion>.      <sco\n+00000bf0: 7065 3e74 6573 743c 2f73 636f 7065 3e0a  pe>test</scope>.\n+00000c00: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n+00000c10: 3e0a 2020 3c2f 6465 7065 6e64 656e 6369  >.  </dependenci\n+00000c20: 6573 3e0a 3c2f 7072 6f6a 6563 743e 0a    es>.</project>.\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/ClassNameGenerator.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/ClassNameGenerator.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,31 +1,31 @@\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.rpc.protocol.thrift;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-/**\n- * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\n- */\n-@Deprecated\n-@SPI(DubboClassNameGenerator.NAME)\n-public interface ClassNameGenerator {\n-\n-    String generateArgsClassName(String serviceName, String methodName);\n-\n-    String generateResultClassName(String serviceName, String methodName);\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.rpc.protocol.thrift;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+/**\r\n+ * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\r\n+ */\r\n+@Deprecated\r\n+@SPI(DubboClassNameGenerator.NAME)\r\n+public interface ClassNameGenerator {\r\n+\r\n+    String generateArgsClassName(String serviceName, String methodName);\r\n+\r\n+    String generateResultClassName(String serviceName, String methodName);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/DubboClassNameGenerator.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/DubboClassNameGenerator.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.rpc.protocol.thrift;\n-/**\n- * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\n- */\n-@Deprecated\n-public class DubboClassNameGenerator implements ClassNameGenerator {\n-\n-    public static final String NAME = \"dubbo\";\n-\n-    @Override\n-    public String generateArgsClassName(String serviceName, String methodName) {\n-        return ThriftUtils.generateMethodArgsClassName(serviceName, methodName);\n-    }\n-\n-    @Override\n-    public String generateResultClassName(String serviceName, String methodName) {\n-        return ThriftUtils.generateMethodResultClassName(serviceName, methodName);\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.rpc.protocol.thrift;\r\n+/**\r\n+ * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\r\n+ */\r\n+@Deprecated\r\n+public class DubboClassNameGenerator implements ClassNameGenerator {\r\n+\r\n+    public static final String NAME = \"dubbo\";\r\n+\r\n+    @Override\r\n+    public String generateArgsClassName(String serviceName, String methodName) {\r\n+        return ThriftUtils.generateMethodArgsClassName(serviceName, methodName);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String generateResultClassName(String serviceName, String methodName) {\r\n+        return ThriftUtils.generateMethodResultClassName(serviceName, methodName);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/ThriftCodec.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,698 +1,698 @@\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.rpc.protocol.thrift;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.utils.ClassUtils;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.Codec2;\n-import org.apache.dubbo.remoting.buffer.ChannelBuffer;\n-import org.apache.dubbo.remoting.buffer.ChannelBufferInputStream;\n-import org.apache.dubbo.remoting.exchange.Request;\n-import org.apache.dubbo.remoting.exchange.Response;\n-import org.apache.dubbo.rpc.AppResponse;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.protocol.thrift.io.RandomAccessByteArrayOutputStream;\n-\n-import org.apache.thrift.TApplicationException;\n-import org.apache.thrift.TBase;\n-import org.apache.thrift.TException;\n-import org.apache.thrift.TFieldIdEnum;\n-import org.apache.thrift.protocol.TBinaryProtocol;\n-import org.apache.thrift.protocol.TMessage;\n-import org.apache.thrift.protocol.TMessageType;\n-import org.apache.thrift.protocol.TProtocol;\n-import org.apache.thrift.transport.TFramedTransport;\n-import org.apache.thrift.transport.TIOStreamTransport;\n-\n-import java.io.IOException;\n-import java.lang.reflect.Field;\n-import java.lang.reflect.InvocationTargetException;\n-import java.lang.reflect.Method;\n-import java.util.ArrayList;\n-import java.util.List;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-import java.util.concurrent.atomic.AtomicInteger;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\n-\n-/**\n- * Thrift framed protocol codec.\n- *\n- * <pre>\n- * |<-                                  message header                                  ->|<- message body ->|\n- * +----------------+----------------------+------------------+---------------------------+------------------+\n- * | magic (2 bytes)|message size (4 bytes)|head size(2 bytes)| version (1 byte) | header |   message body   |\n- * +----------------+----------------------+------------------+---------------------------+------------------+\n- * |<-                                               message size                                          ->|\n- * </pre>\n- *\n- * <p>\n- * <b>header fields in version 1</b>\n- * <ol>\n- * <li>string - service name</li>\n- * <li>long   - dubbo request id</li>\n- * </ol>\n- * </p>\n- */\n-\n-/**\n- * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\n- */\n-@Deprecated\n-public class ThriftCodec implements Codec2 {\n-\n-    public static final int MESSAGE_LENGTH_INDEX = 2;\n-    public static final int MESSAGE_HEADER_LENGTH_INDEX = 6;\n-    public static final int MESSAGE_SHORTEST_LENGTH = 10;\n-    public static final String NAME = \"thrift\";\n-    public static final String PARAMETER_CLASS_NAME_GENERATOR = \"class.name.generator\";\n-    public static final byte VERSION = (byte) 1;\n-    public static final short MAGIC = (short) 0xdabc;\n-    static final ConcurrentMap<Long, RequestData> CACHED_REQUEST =\n-            new ConcurrentHashMap<>();\n-    private static final AtomicInteger THRIFT_SEQ_ID = new AtomicInteger(0);\n-    private static final ConcurrentMap<String, Class<?>> CACHED_CLASS =\n-            new ConcurrentHashMap<>();\n-\n-    private static int nextSeqId() {\n-        return THRIFT_SEQ_ID.incrementAndGet();\n-    }\n-\n-    // just for test\n-    static int getSeqId() {\n-        return THRIFT_SEQ_ID.get();\n-    }\n-\n-    @Override\n-    public void encode(Channel channel, ChannelBuffer buffer, Object message)\n-            throws IOException {\n-\n-        if (message instanceof Request) {\n-            encodeRequest(channel, buffer, (Request) message);\n-        } else if (message instanceof Response) {\n-            encodeResponse(channel, buffer, (Response) message);\n-        } else {\n-            throw new UnsupportedOperationException(\"Thrift codec only support encode \"\n-                    + Request.class.getName() + \" and \" + Response.class.getName());\n-        }\n-\n-    }\n-\n-    @Override\n-    public Object decode(Channel channel, ChannelBuffer buffer) throws IOException {\n-\n-        int available = buffer.readableBytes();\n-\n-        if (available < MESSAGE_SHORTEST_LENGTH) {\n-\n-            return DecodeResult.NEED_MORE_INPUT;\n-\n-        } else {\n-\n-            TIOStreamTransport transport = new TIOStreamTransport(new ChannelBufferInputStream(buffer));\n-\n-            TBinaryProtocol protocol = new TBinaryProtocol(transport);\n-\n-            short magic;\n-            int messageLength;\n-\n-            try {\n-//                protocol.readI32(); // skip the first message length\n-                byte[] bytes = new byte[4];\n-                transport.read(bytes, 0, 4);\n-                magic = protocol.readI16();\n-                messageLength = protocol.readI32();\n-\n-            } catch (TException e) {\n-                throw new IOException(e.getMessage(), e);\n-            }\n-\n-            if (MAGIC != magic) {\n-                throw new IOException(\"Unknown magic code \" + magic);\n-            }\n-\n-            if (available < messageLength) {\n-                return DecodeResult.NEED_MORE_INPUT;\n-            }\n-\n-            return decode(protocol);\n-\n-        }\n-\n-    }\n-\n-    private Object decode(TProtocol protocol)\n-            throws IOException {\n-\n-        // version\n-        String serviceName;\n-        String path;\n-        long id;\n-\n-        TMessage message;\n-\n-        try {\n-            protocol.readI16();\n-            protocol.readByte();\n-            serviceName = protocol.readString();\n-            path = protocol.readString();\n-            id = protocol.readI64();\n-            message = protocol.readMessageBegin();\n-        } catch (TException e) {\n-            throw new IOException(e.getMessage(), e);\n-        }\n-\n-        if (message.type == TMessageType.CALL) {\n-\n-            RpcInvocation result = new RpcInvocation();\n-            result.setAttachment(INTERFACE_KEY, serviceName);\n-            result.setAttachment(PATH_KEY, path);\n-            result.setMethodName(message.name);\n-\n-            String argsClassName = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class)\n-                    .getExtension(ThriftClassNameGenerator.NAME).generateArgsClassName(serviceName, message.name);\n-\n-            if (StringUtils.isEmpty(argsClassName)) {\n-                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION,\n-                        \"The specified interface name incorrect.\");\n-            }\n-\n-            Class clazz = CACHED_CLASS.get(argsClassName);\n-\n-            if (clazz == null) {\n-                try {\n-\n-                    clazz = ClassUtils.forNameWithThreadContextClassLoader(argsClassName);\n-\n-                    CACHED_CLASS.putIfAbsent(argsClassName, clazz);\n-\n-                } catch (ClassNotFoundException e) {\n-                    throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-                }\n-            }\n-\n-            TBase args;\n-\n-            try {\n-                args = (TBase) clazz.newInstance();\n-            } catch (InstantiationException | IllegalAccessException e) {\n-                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-            }\n-\n-            try {\n-                args.read(protocol);\n-                protocol.readMessageEnd();\n-            } catch (TException e) {\n-                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-            }\n-\n-            List<Object> parameters = new ArrayList<>();\n-            List<Class<?>> parameterTypes = new ArrayList<>();\n-            int index = 1;\n-\n-            while (true) {\n-\n-                TFieldIdEnum fieldIdEnum = args.fieldForId(index++);\n-\n-                if (fieldIdEnum == null) {\n-                    break;\n-                }\n-\n-                String fieldName = fieldIdEnum.getFieldName();\n-\n-                String getMethodName = ThriftUtils.generateGetMethodName(fieldName);\n-\n-                Method getMethod;\n-\n-                try {\n-                    getMethod = clazz.getMethod(getMethodName);\n-                } catch (NoSuchMethodException e) {\n-                    throw new RpcException(\n-                            RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-                }\n-\n-                parameterTypes.add(getMethod.getReturnType());\n-                try {\n-                    parameters.add(getMethod.invoke(args));\n-                } catch (IllegalAccessException | InvocationTargetException e) {\n-                    throw new RpcException(\n-                            RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-                }\n-\n-            }\n-\n-            result.setArguments(parameters.toArray());\n-            result.setParameterTypes(parameterTypes.toArray(new Class[0]));\n-\n-            Request request = new Request(id);\n-            request.setData(result);\n-\n-            CACHED_REQUEST.putIfAbsent(id,\n-                    RequestData.create(message.seqid, serviceName, message.name));\n-\n-            return request;\n-\n-        } else if (message.type == TMessageType.EXCEPTION) {\n-\n-            TApplicationException exception;\n-\n-            try {\n-                exception = TApplicationException.readFrom(protocol);\n-                protocol.readMessageEnd();\n-            } catch (TException e) {\n-                throw new IOException(e.getMessage(), e);\n-            }\n-\n-            AppResponse result = new AppResponse();\n-\n-            result.setException(new RpcException(exception.getMessage()));\n-\n-            Response response = new Response();\n-\n-            response.setResult(result);\n-\n-            response.setId(id);\n-\n-            return response;\n-\n-        } else if (message.type == TMessageType.REPLY) {\n-\n-            String resultClassName = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class)\n-                    .getExtension(ThriftClassNameGenerator.NAME).generateResultClassName(serviceName, message.name);\n-\n-            if (StringUtils.isEmpty(resultClassName)) {\n-                throw new IllegalArgumentException(\"Could not infer service result class name from service name \"\n-                        + serviceName + \", the service name you specified may not generated by thrift idl compiler\");\n-            }\n-\n-            Class<?> clazz = CACHED_CLASS.get(resultClassName);\n-\n-            if (clazz == null) {\n-\n-                try {\n-\n-                    clazz = ClassUtils.forNameWithThreadContextClassLoader(resultClassName);\n-\n-                    CACHED_CLASS.putIfAbsent(resultClassName, clazz);\n-\n-                } catch (ClassNotFoundException e) {\n-                    throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-                }\n-\n-            }\n-\n-            TBase<?, ? extends TFieldIdEnum> result;\n-            try {\n-                result = (TBase<?, ?>) clazz.newInstance();\n-            } catch (InstantiationException | IllegalAccessException e) {\n-                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-            }\n-\n-            try {\n-                result.read(protocol);\n-                protocol.readMessageEnd();\n-            } catch (TException e) {\n-                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-            }\n-\n-            Object realResult = null;\n-\n-            int index = 0;\n-\n-            while (true) {\n-\n-                TFieldIdEnum fieldIdEnum = result.fieldForId(index++);\n-\n-                if (fieldIdEnum == null) {\n-                    break;\n-                }\n-\n-                Field field;\n-\n-                try {\n-                    field = clazz.getDeclaredField(fieldIdEnum.getFieldName());\n-                    ReflectUtils.makeAccessible(field);\n-                } catch (NoSuchFieldException e) {\n-                    throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-                }\n-\n-                try {\n-                    realResult = field.get(result);\n-                } catch (IllegalAccessException e) {\n-                    throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-                }\n-\n-                if (realResult != null) {\n-                    break;\n-                }\n-\n-            }\n-\n-            Response response = new Response();\n-\n-            response.setId(id);\n-\n-            AppResponse appResponse = new AppResponse();\n-\n-            if (realResult instanceof Throwable) {\n-                appResponse.setException((Throwable) realResult);\n-            } else {\n-                appResponse.setValue(realResult);\n-            }\n-\n-            response.setResult(appResponse);\n-\n-            return response;\n-\n-        } else {\n-            // Impossible\n-            throw new IOException();\n-        }\n-\n-    }\n-\n-    private void encodeRequest(Channel channel, ChannelBuffer buffer, Request request)\n-            throws IOException {\n-\n-        RpcInvocation inv = (RpcInvocation) request.getData();\n-\n-        int seqId = nextSeqId();\n-\n-        String serviceName = inv.getAttachment(INTERFACE_KEY);\n-\n-        if (StringUtils.isEmpty(serviceName)) {\n-            throw new IllegalArgumentException(\"Could not find service name in attachment with key \"\n-                    + INTERFACE_KEY);\n-        }\n-\n-        TMessage message = new TMessage(\n-                inv.getMethodName(),\n-                TMessageType.CALL,\n-                seqId);\n-\n-        String methodArgs = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class)\n-                .getExtension(channel.getUrl().getParameter(ThriftConstants.CLASS_NAME_GENERATOR_KEY, ThriftClassNameGenerator.NAME))\n-                .generateArgsClassName(serviceName, inv.getMethodName());\n-\n-        if (StringUtils.isEmpty(methodArgs)) {\n-            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION,\n-                    \"Could not encode request, the specified interface may be incorrect.\");\n-        }\n-\n-        Class<?> clazz = CACHED_CLASS.get(methodArgs);\n-\n-        if (clazz == null) {\n-\n-            try {\n-\n-                clazz = ClassUtils.forNameWithThreadContextClassLoader(methodArgs);\n-\n-                CACHED_CLASS.putIfAbsent(methodArgs, clazz);\n-\n-            } catch (ClassNotFoundException e) {\n-                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-            }\n-\n-        }\n-\n-        TBase args;\n-\n-        try {\n-            args = (TBase) clazz.newInstance();\n-        } catch (InstantiationException | IllegalAccessException e) {\n-            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-        }\n-\n-        for (int i = 0; i < inv.getArguments().length; i++) {\n-\n-            Object obj = inv.getArguments()[i];\n-\n-            if (obj == null) {\n-                continue;\n-            }\n-\n-            TFieldIdEnum field = args.fieldForId(i + 1);\n-\n-            String setMethodName = ThriftUtils.generateSetMethodName(field.getFieldName());\n-\n-            Method method;\n-\n-            try {\n-                method = clazz.getMethod(setMethodName, inv.getParameterTypes()[i]);\n-            } catch (NoSuchMethodException e) {\n-                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-            }\n-\n-            try {\n-                method.invoke(args, obj);\n-            } catch (IllegalAccessException | InvocationTargetException e) {\n-                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-            }\n-\n-        }\n-\n-        RandomAccessByteArrayOutputStream bos = new RandomAccessByteArrayOutputStream(1024);\n-\n-        TIOStreamTransport transport = new TIOStreamTransport(bos);\n-\n-        TBinaryProtocol protocol = new TBinaryProtocol(transport);\n-\n-        int headerLength, messageLength;\n-\n-        byte[] bytes = new byte[4];\n-        try {\n-            // magic\n-            protocol.writeI16(MAGIC);\n-            // message length placeholder\n-            protocol.writeI32(Integer.MAX_VALUE);\n-            // message header length placeholder\n-            protocol.writeI16(Short.MAX_VALUE);\n-            // version\n-            protocol.writeByte(VERSION);\n-            // service name\n-            protocol.writeString(serviceName);\n-            // path\n-            protocol.writeString(inv.getAttachment(PATH_KEY));\n-            // dubbo request id\n-            protocol.writeI64(request.getId());\n-            protocol.getTransport().flush();\n-            // header size\n-            headerLength = bos.size();\n-\n-            // message body\n-            protocol.writeMessageBegin(message);\n-            args.write(protocol);\n-            protocol.writeMessageEnd();\n-            protocol.getTransport().flush();\n-            int oldIndex = messageLength = bos.size();\n-\n-            // fill in message length and header length\n-            try {\n-                TFramedTransport.encodeFrameSize(messageLength, bytes);\n-                bos.setWriteIndex(MESSAGE_LENGTH_INDEX);\n-                protocol.writeI32(messageLength);\n-                bos.setWriteIndex(MESSAGE_HEADER_LENGTH_INDEX);\n-                protocol.writeI16((short) (0xffff & headerLength));\n-            } finally {\n-                bos.setWriteIndex(oldIndex);\n-            }\n-\n-        } catch (TException e) {\n-            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-        }\n-\n-        buffer.writeBytes(bytes);\n-        buffer.writeBytes(bos.toByteArray());\n-\n-    }\n-\n-    private void encodeResponse(Channel channel, ChannelBuffer buffer, Response response)\n-            throws IOException {\n-\n-        AppResponse result = (AppResponse) response.getResult();\n-\n-        RequestData rd = CACHED_REQUEST.get(response.getId());\n-\n-        String resultClassName = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class).getExtension(\n-                channel.getUrl().getParameter(ThriftConstants.CLASS_NAME_GENERATOR_KEY, ThriftClassNameGenerator.NAME))\n-                .generateResultClassName(rd.serviceName, rd.methodName);\n-\n-        if (StringUtils.isEmpty(resultClassName)) {\n-            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION,\n-                    \"Could not encode response, the specified interface may be incorrect.\");\n-        }\n-\n-        Class clazz = CACHED_CLASS.get(resultClassName);\n-\n-        if (clazz == null) {\n-\n-            try {\n-                clazz = ClassUtils.forNameWithThreadContextClassLoader(resultClassName);\n-                CACHED_CLASS.putIfAbsent(resultClassName, clazz);\n-            } catch (ClassNotFoundException e) {\n-                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-            }\n-\n-        }\n-\n-        TBase resultObj;\n-\n-        try {\n-            resultObj = (TBase) clazz.newInstance();\n-        } catch (InstantiationException | IllegalAccessException e) {\n-            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-        }\n-\n-        TApplicationException applicationException = null;\n-        TMessage message;\n-\n-        if (result.hasException()) {\n-            Throwable throwable = result.getException();\n-            int index = 1;\n-            boolean found = false;\n-            while (true) {\n-                TFieldIdEnum fieldIdEnum = resultObj.fieldForId(index++);\n-                if (fieldIdEnum == null) {\n-                    break;\n-                }\n-                String fieldName = fieldIdEnum.getFieldName();\n-                String getMethodName = ThriftUtils.generateGetMethodName(fieldName);\n-                String setMethodName = ThriftUtils.generateSetMethodName(fieldName);\n-                Method getMethod;\n-                Method setMethod;\n-                try {\n-                    getMethod = clazz.getMethod(getMethodName);\n-                    if (getMethod.getReturnType().equals(throwable.getClass())) {\n-                        found = true;\n-                        setMethod = clazz.getMethod(setMethodName, throwable.getClass());\n-                        setMethod.invoke(resultObj, throwable);\n-                    }\n-                } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {\n-                    throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-                }\n-            }\n-\n-            if (!found) {\n-                applicationException = new TApplicationException(throwable.getMessage());\n-            }\n-\n-        } else {\n-            Object realResult = result.getValue();\n-            // result field id is 0\n-            String fieldName = resultObj.fieldForId(0).getFieldName();\n-            String setMethodName = ThriftUtils.generateSetMethodName(fieldName);\n-            String getMethodName = ThriftUtils.generateGetMethodName(fieldName);\n-            Method getMethod;\n-            Method setMethod;\n-            try {\n-                getMethod = clazz.getMethod(getMethodName);\n-                setMethod = clazz.getMethod(setMethodName, getMethod.getReturnType());\n-                setMethod.invoke(resultObj, realResult);\n-            } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {\n-                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-            }\n-\n-        }\n-\n-        if (applicationException != null) {\n-            message = new TMessage(rd.methodName, TMessageType.EXCEPTION, rd.id);\n-        } else {\n-            message = new TMessage(rd.methodName, TMessageType.REPLY, rd.id);\n-        }\n-\n-        RandomAccessByteArrayOutputStream bos = new RandomAccessByteArrayOutputStream(1024);\n-\n-        TIOStreamTransport transport = new TIOStreamTransport(bos);\n-\n-        TBinaryProtocol protocol = new TBinaryProtocol(transport);\n-\n-        int messageLength;\n-        int headerLength;\n-\n-        byte[] bytes = new byte[4];\n-        try {\n-            // magic\n-            protocol.writeI16(MAGIC);\n-            // message length\n-            protocol.writeI32(Integer.MAX_VALUE);\n-            // message header length\n-            protocol.writeI16(Short.MAX_VALUE);\n-            // version\n-            protocol.writeByte(VERSION);\n-            // service name\n-            protocol.writeString(rd.serviceName);\n-            // id\n-            protocol.writeI64(response.getId());\n-            protocol.getTransport().flush();\n-            headerLength = bos.size();\n-\n-            // message\n-            protocol.writeMessageBegin(message);\n-            switch (message.type) {\n-                case TMessageType.EXCEPTION:\n-                    applicationException.write(protocol);\n-                    break;\n-                case TMessageType.REPLY:\n-                    resultObj.write(protocol);\n-                    break;\n-                default:\n-            }\n-            protocol.writeMessageEnd();\n-            protocol.getTransport().flush();\n-            int oldIndex = messageLength = bos.size();\n-\n-            try {\n-                TFramedTransport.encodeFrameSize(messageLength, bytes);\n-                bos.setWriteIndex(MESSAGE_LENGTH_INDEX);\n-                protocol.writeI32(messageLength);\n-                bos.setWriteIndex(MESSAGE_HEADER_LENGTH_INDEX);\n-                protocol.writeI16((short) (0xffff & headerLength));\n-            } finally {\n-                bos.setWriteIndex(oldIndex);\n-            }\n-\n-        } catch (TException e) {\n-            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\n-        }\n-\n-        buffer.writeBytes(bytes);\n-        buffer.writeBytes(bos.toByteArray());\n-\n-    }\n-\n-    static class RequestData {\n-        int id;\n-        String serviceName;\n-        String methodName;\n-\n-        static RequestData create(int id, String sn, String mn) {\n-            RequestData result = new RequestData();\n-            result.id = id;\n-            result.serviceName = sn;\n-            result.methodName = mn;\n-            return result;\n-        }\n-\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.protocol.thrift;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.utils.ClassUtils;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.Codec2;\r\n+import org.apache.dubbo.remoting.buffer.ChannelBuffer;\r\n+import org.apache.dubbo.remoting.buffer.ChannelBufferInputStream;\r\n+import org.apache.dubbo.remoting.exchange.Request;\r\n+import org.apache.dubbo.remoting.exchange.Response;\r\n+import org.apache.dubbo.rpc.AppResponse;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.protocol.thrift.io.RandomAccessByteArrayOutputStream;\r\n+\r\n+import org.apache.thrift.TApplicationException;\r\n+import org.apache.thrift.TBase;\r\n+import org.apache.thrift.TException;\r\n+import org.apache.thrift.TFieldIdEnum;\r\n+import org.apache.thrift.protocol.TBinaryProtocol;\r\n+import org.apache.thrift.protocol.TMessage;\r\n+import org.apache.thrift.protocol.TMessageType;\r\n+import org.apache.thrift.protocol.TProtocol;\r\n+import org.apache.thrift.transport.TFramedTransport;\r\n+import org.apache.thrift.transport.TIOStreamTransport;\r\n+\r\n+import java.io.IOException;\r\n+import java.lang.reflect.Field;\r\n+import java.lang.reflect.InvocationTargetException;\r\n+import java.lang.reflect.Method;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+import java.util.concurrent.atomic.AtomicInteger;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\r\n+\r\n+/**\r\n+ * Thrift framed protocol codec.\r\n+ *\r\n+ * <pre>\r\n+ * |<-                                  message header                                  ->|<- message body ->|\r\n+ * +----------------+----------------------+------------------+---------------------------+------------------+\r\n+ * | magic (2 bytes)|message size (4 bytes)|head size(2 bytes)| version (1 byte) | header |   message body   |\r\n+ * +----------------+----------------------+------------------+---------------------------+------------------+\r\n+ * |<-                                               message size                                          ->|\r\n+ * </pre>\r\n+ *\r\n+ * <p>\r\n+ * <b>header fields in version 1</b>\r\n+ * <ol>\r\n+ * <li>string - service name</li>\r\n+ * <li>long   - dubbo request id</li>\r\n+ * </ol>\r\n+ * </p>\r\n+ */\r\n+\r\n+/**\r\n+ * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\r\n+ */\r\n+@Deprecated\r\n+public class ThriftCodec implements Codec2 {\r\n+\r\n+    public static final int MESSAGE_LENGTH_INDEX = 2;\r\n+    public static final int MESSAGE_HEADER_LENGTH_INDEX = 6;\r\n+    public static final int MESSAGE_SHORTEST_LENGTH = 10;\r\n+    public static final String NAME = \"thrift\";\r\n+    public static final String PARAMETER_CLASS_NAME_GENERATOR = \"class.name.generator\";\r\n+    public static final byte VERSION = (byte) 1;\r\n+    public static final short MAGIC = (short) 0xdabc;\r\n+    static final ConcurrentMap<Long, RequestData> CACHED_REQUEST =\r\n+            new ConcurrentHashMap<>();\r\n+    private static final AtomicInteger THRIFT_SEQ_ID = new AtomicInteger(0);\r\n+    private static final ConcurrentMap<String, Class<?>> CACHED_CLASS =\r\n+            new ConcurrentHashMap<>();\r\n+\r\n+    private static int nextSeqId() {\r\n+        return THRIFT_SEQ_ID.incrementAndGet();\r\n+    }\r\n+\r\n+    // just for test\r\n+    static int getSeqId() {\r\n+        return THRIFT_SEQ_ID.get();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void encode(Channel channel, ChannelBuffer buffer, Object message)\r\n+            throws IOException {\r\n+\r\n+        if (message instanceof Request) {\r\n+            encodeRequest(channel, buffer, (Request) message);\r\n+        } else if (message instanceof Response) {\r\n+            encodeResponse(channel, buffer, (Response) message);\r\n+        } else {\r\n+            throw new UnsupportedOperationException(\"Thrift codec only support encode \"\r\n+                    + Request.class.getName() + \" and \" + Response.class.getName());\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object decode(Channel channel, ChannelBuffer buffer) throws IOException {\r\n+\r\n+        int available = buffer.readableBytes();\r\n+\r\n+        if (available < MESSAGE_SHORTEST_LENGTH) {\r\n+\r\n+            return DecodeResult.NEED_MORE_INPUT;\r\n+\r\n+        } else {\r\n+\r\n+            TIOStreamTransport transport = new TIOStreamTransport(new ChannelBufferInputStream(buffer));\r\n+\r\n+            TBinaryProtocol protocol = new TBinaryProtocol(transport);\r\n+\r\n+            short magic;\r\n+            int messageLength;\r\n+\r\n+            try {\r\n+//                protocol.readI32(); // skip the first message length\r\n+                byte[] bytes = new byte[4];\r\n+                transport.read(bytes, 0, 4);\r\n+                magic = protocol.readI16();\r\n+                messageLength = protocol.readI32();\r\n+\r\n+            } catch (TException e) {\r\n+                throw new IOException(e.getMessage(), e);\r\n+            }\r\n+\r\n+            if (MAGIC != magic) {\r\n+                throw new IOException(\"Unknown magic code \" + magic);\r\n+            }\r\n+\r\n+            if (available < messageLength) {\r\n+                return DecodeResult.NEED_MORE_INPUT;\r\n+            }\r\n+\r\n+            return decode(protocol);\r\n+\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    private Object decode(TProtocol protocol)\r\n+            throws IOException {\r\n+\r\n+        // version\r\n+        String serviceName;\r\n+        String path;\r\n+        long id;\r\n+\r\n+        TMessage message;\r\n+\r\n+        try {\r\n+            protocol.readI16();\r\n+            protocol.readByte();\r\n+            serviceName = protocol.readString();\r\n+            path = protocol.readString();\r\n+            id = protocol.readI64();\r\n+            message = protocol.readMessageBegin();\r\n+        } catch (TException e) {\r\n+            throw new IOException(e.getMessage(), e);\r\n+        }\r\n+\r\n+        if (message.type == TMessageType.CALL) {\r\n+\r\n+            RpcInvocation result = new RpcInvocation();\r\n+            result.setAttachment(INTERFACE_KEY, serviceName);\r\n+            result.setAttachment(PATH_KEY, path);\r\n+            result.setMethodName(message.name);\r\n+\r\n+            String argsClassName = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class)\r\n+                    .getExtension(ThriftClassNameGenerator.NAME).generateArgsClassName(serviceName, message.name);\r\n+\r\n+            if (StringUtils.isEmpty(argsClassName)) {\r\n+                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION,\r\n+                        \"The specified interface name incorrect.\");\r\n+            }\r\n+\r\n+            Class clazz = CACHED_CLASS.get(argsClassName);\r\n+\r\n+            if (clazz == null) {\r\n+                try {\r\n+\r\n+                    clazz = ClassUtils.forNameWithThreadContextClassLoader(argsClassName);\r\n+\r\n+                    CACHED_CLASS.putIfAbsent(argsClassName, clazz);\r\n+\r\n+                } catch (ClassNotFoundException e) {\r\n+                    throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+                }\r\n+            }\r\n+\r\n+            TBase args;\r\n+\r\n+            try {\r\n+                args = (TBase) clazz.newInstance();\r\n+            } catch (InstantiationException | IllegalAccessException e) {\r\n+                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+            }\r\n+\r\n+            try {\r\n+                args.read(protocol);\r\n+                protocol.readMessageEnd();\r\n+            } catch (TException e) {\r\n+                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+            }\r\n+\r\n+            List<Object> parameters = new ArrayList<>();\r\n+            List<Class<?>> parameterTypes = new ArrayList<>();\r\n+            int index = 1;\r\n+\r\n+            while (true) {\r\n+\r\n+                TFieldIdEnum fieldIdEnum = args.fieldForId(index++);\r\n+\r\n+                if (fieldIdEnum == null) {\r\n+                    break;\r\n+                }\r\n+\r\n+                String fieldName = fieldIdEnum.getFieldName();\r\n+\r\n+                String getMethodName = ThriftUtils.generateGetMethodName(fieldName);\r\n+\r\n+                Method getMethod;\r\n+\r\n+                try {\r\n+                    getMethod = clazz.getMethod(getMethodName);\r\n+                } catch (NoSuchMethodException e) {\r\n+                    throw new RpcException(\r\n+                            RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+                }\r\n+\r\n+                parameterTypes.add(getMethod.getReturnType());\r\n+                try {\r\n+                    parameters.add(getMethod.invoke(args));\r\n+                } catch (IllegalAccessException | InvocationTargetException e) {\r\n+                    throw new RpcException(\r\n+                            RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+                }\r\n+\r\n+            }\r\n+\r\n+            result.setArguments(parameters.toArray());\r\n+            result.setParameterTypes(parameterTypes.toArray(new Class[0]));\r\n+\r\n+            Request request = new Request(id);\r\n+            request.setData(result);\r\n+\r\n+            CACHED_REQUEST.putIfAbsent(id,\r\n+                    RequestData.create(message.seqid, serviceName, message.name));\r\n+\r\n+            return request;\r\n+\r\n+        } else if (message.type == TMessageType.EXCEPTION) {\r\n+\r\n+            TApplicationException exception;\r\n+\r\n+            try {\r\n+                exception = TApplicationException.readFrom(protocol);\r\n+                protocol.readMessageEnd();\r\n+            } catch (TException e) {\r\n+                throw new IOException(e.getMessage(), e);\r\n+            }\r\n+\r\n+            AppResponse result = new AppResponse();\r\n+\r\n+            result.setException(new RpcException(exception.getMessage()));\r\n+\r\n+            Response response = new Response();\r\n+\r\n+            response.setResult(result);\r\n+\r\n+            response.setId(id);\r\n+\r\n+            return response;\r\n+\r\n+        } else if (message.type == TMessageType.REPLY) {\r\n+\r\n+            String resultClassName = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class)\r\n+                    .getExtension(ThriftClassNameGenerator.NAME).generateResultClassName(serviceName, message.name);\r\n+\r\n+            if (StringUtils.isEmpty(resultClassName)) {\r\n+                throw new IllegalArgumentException(\"Could not infer service result class name from service name \"\r\n+                        + serviceName + \", the service name you specified may not generated by thrift idl compiler\");\r\n+            }\r\n+\r\n+            Class<?> clazz = CACHED_CLASS.get(resultClassName);\r\n+\r\n+            if (clazz == null) {\r\n+\r\n+                try {\r\n+\r\n+                    clazz = ClassUtils.forNameWithThreadContextClassLoader(resultClassName);\r\n+\r\n+                    CACHED_CLASS.putIfAbsent(resultClassName, clazz);\r\n+\r\n+                } catch (ClassNotFoundException e) {\r\n+                    throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+                }\r\n+\r\n+            }\r\n+\r\n+            TBase<?, ? extends TFieldIdEnum> result;\r\n+            try {\r\n+                result = (TBase<?, ?>) clazz.newInstance();\r\n+            } catch (InstantiationException | IllegalAccessException e) {\r\n+                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+            }\r\n+\r\n+            try {\r\n+                result.read(protocol);\r\n+                protocol.readMessageEnd();\r\n+            } catch (TException e) {\r\n+                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+            }\r\n+\r\n+            Object realResult = null;\r\n+\r\n+            int index = 0;\r\n+\r\n+            while (true) {\r\n+\r\n+                TFieldIdEnum fieldIdEnum = result.fieldForId(index++);\r\n+\r\n+                if (fieldIdEnum == null) {\r\n+                    break;\r\n+                }\r\n+\r\n+                Field field;\r\n+\r\n+                try {\r\n+                    field = clazz.getDeclaredField(fieldIdEnum.getFieldName());\r\n+                    ReflectUtils.makeAccessible(field);\r\n+                } catch (NoSuchFieldException e) {\r\n+                    throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+                }\r\n+\r\n+                try {\r\n+                    realResult = field.get(result);\r\n+                } catch (IllegalAccessException e) {\r\n+                    throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+                }\r\n+\r\n+                if (realResult != null) {\r\n+                    break;\r\n+                }\r\n+\r\n+            }\r\n+\r\n+            Response response = new Response();\r\n+\r\n+            response.setId(id);\r\n+\r\n+            AppResponse appResponse = new AppResponse();\r\n+\r\n+            if (realResult instanceof Throwable) {\r\n+                appResponse.setException((Throwable) realResult);\r\n+            } else {\r\n+                appResponse.setValue(realResult);\r\n+            }\r\n+\r\n+            response.setResult(appResponse);\r\n+\r\n+            return response;\r\n+\r\n+        } else {\r\n+            // Impossible\r\n+            throw new IOException();\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    private void encodeRequest(Channel channel, ChannelBuffer buffer, Request request)\r\n+            throws IOException {\r\n+\r\n+        RpcInvocation inv = (RpcInvocation) request.getData();\r\n+\r\n+        int seqId = nextSeqId();\r\n+\r\n+        String serviceName = inv.getAttachment(INTERFACE_KEY);\r\n+\r\n+        if (StringUtils.isEmpty(serviceName)) {\r\n+            throw new IllegalArgumentException(\"Could not find service name in attachment with key \"\r\n+                    + INTERFACE_KEY);\r\n+        }\r\n+\r\n+        TMessage message = new TMessage(\r\n+                inv.getMethodName(),\r\n+                TMessageType.CALL,\r\n+                seqId);\r\n+\r\n+        String methodArgs = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class)\r\n+                .getExtension(channel.getUrl().getParameter(ThriftConstants.CLASS_NAME_GENERATOR_KEY, ThriftClassNameGenerator.NAME))\r\n+                .generateArgsClassName(serviceName, inv.getMethodName());\r\n+\r\n+        if (StringUtils.isEmpty(methodArgs)) {\r\n+            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION,\r\n+                    \"Could not encode request, the specified interface may be incorrect.\");\r\n+        }\r\n+\r\n+        Class<?> clazz = CACHED_CLASS.get(methodArgs);\r\n+\r\n+        if (clazz == null) {\r\n+\r\n+            try {\r\n+\r\n+                clazz = ClassUtils.forNameWithThreadContextClassLoader(methodArgs);\r\n+\r\n+                CACHED_CLASS.putIfAbsent(methodArgs, clazz);\r\n+\r\n+            } catch (ClassNotFoundException e) {\r\n+                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+            }\r\n+\r\n+        }\r\n+\r\n+        TBase args;\r\n+\r\n+        try {\r\n+            args = (TBase) clazz.newInstance();\r\n+        } catch (InstantiationException | IllegalAccessException e) {\r\n+            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+        }\r\n+\r\n+        for (int i = 0; i < inv.getArguments().length; i++) {\r\n+\r\n+            Object obj = inv.getArguments()[i];\r\n+\r\n+            if (obj == null) {\r\n+                continue;\r\n+            }\r\n+\r\n+            TFieldIdEnum field = args.fieldForId(i + 1);\r\n+\r\n+            String setMethodName = ThriftUtils.generateSetMethodName(field.getFieldName());\r\n+\r\n+            Method method;\r\n+\r\n+            try {\r\n+                method = clazz.getMethod(setMethodName, inv.getParameterTypes()[i]);\r\n+            } catch (NoSuchMethodException e) {\r\n+                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+            }\r\n+\r\n+            try {\r\n+                method.invoke(args, obj);\r\n+            } catch (IllegalAccessException | InvocationTargetException e) {\r\n+                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+            }\r\n+\r\n+        }\r\n+\r\n+        RandomAccessByteArrayOutputStream bos = new RandomAccessByteArrayOutputStream(1024);\r\n+\r\n+        TIOStreamTransport transport = new TIOStreamTransport(bos);\r\n+\r\n+        TBinaryProtocol protocol = new TBinaryProtocol(transport);\r\n+\r\n+        int headerLength, messageLength;\r\n+\r\n+        byte[] bytes = new byte[4];\r\n+        try {\r\n+            // magic\r\n+            protocol.writeI16(MAGIC);\r\n+            // message length placeholder\r\n+            protocol.writeI32(Integer.MAX_VALUE);\r\n+            // message header length placeholder\r\n+            protocol.writeI16(Short.MAX_VALUE);\r\n+            // version\r\n+            protocol.writeByte(VERSION);\r\n+            // service name\r\n+            protocol.writeString(serviceName);\r\n+            // path\r\n+            protocol.writeString(inv.getAttachment(PATH_KEY));\r\n+            // dubbo request id\r\n+            protocol.writeI64(request.getId());\r\n+            protocol.getTransport().flush();\r\n+            // header size\r\n+            headerLength = bos.size();\r\n+\r\n+            // message body\r\n+            protocol.writeMessageBegin(message);\r\n+            args.write(protocol);\r\n+            protocol.writeMessageEnd();\r\n+            protocol.getTransport().flush();\r\n+            int oldIndex = messageLength = bos.size();\r\n+\r\n+            // fill in message length and header length\r\n+            try {\r\n+                TFramedTransport.encodeFrameSize(messageLength, bytes);\r\n+                bos.setWriteIndex(MESSAGE_LENGTH_INDEX);\r\n+                protocol.writeI32(messageLength);\r\n+                bos.setWriteIndex(MESSAGE_HEADER_LENGTH_INDEX);\r\n+                protocol.writeI16((short) (0xffff & headerLength));\r\n+            } finally {\r\n+                bos.setWriteIndex(oldIndex);\r\n+            }\r\n+\r\n+        } catch (TException e) {\r\n+            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+        }\r\n+\r\n+        buffer.writeBytes(bytes);\r\n+        buffer.writeBytes(bos.toByteArray());\r\n+\r\n+    }\r\n+\r\n+    private void encodeResponse(Channel channel, ChannelBuffer buffer, Response response)\r\n+            throws IOException {\r\n+\r\n+        AppResponse result = (AppResponse) response.getResult();\r\n+\r\n+        RequestData rd = CACHED_REQUEST.get(response.getId());\r\n+\r\n+        String resultClassName = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class).getExtension(\r\n+                channel.getUrl().getParameter(ThriftConstants.CLASS_NAME_GENERATOR_KEY, ThriftClassNameGenerator.NAME))\r\n+                .generateResultClassName(rd.serviceName, rd.methodName);\r\n+\r\n+        if (StringUtils.isEmpty(resultClassName)) {\r\n+            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION,\r\n+                    \"Could not encode response, the specified interface may be incorrect.\");\r\n+        }\r\n+\r\n+        Class clazz = CACHED_CLASS.get(resultClassName);\r\n+\r\n+        if (clazz == null) {\r\n+\r\n+            try {\r\n+                clazz = ClassUtils.forNameWithThreadContextClassLoader(resultClassName);\r\n+                CACHED_CLASS.putIfAbsent(resultClassName, clazz);\r\n+            } catch (ClassNotFoundException e) {\r\n+                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+            }\r\n+\r\n+        }\r\n+\r\n+        TBase resultObj;\r\n+\r\n+        try {\r\n+            resultObj = (TBase) clazz.newInstance();\r\n+        } catch (InstantiationException | IllegalAccessException e) {\r\n+            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+        }\r\n+\r\n+        TApplicationException applicationException = null;\r\n+        TMessage message;\r\n+\r\n+        if (result.hasException()) {\r\n+            Throwable throwable = result.getException();\r\n+            int index = 1;\r\n+            boolean found = false;\r\n+            while (true) {\r\n+                TFieldIdEnum fieldIdEnum = resultObj.fieldForId(index++);\r\n+                if (fieldIdEnum == null) {\r\n+                    break;\r\n+                }\r\n+                String fieldName = fieldIdEnum.getFieldName();\r\n+                String getMethodName = ThriftUtils.generateGetMethodName(fieldName);\r\n+                String setMethodName = ThriftUtils.generateSetMethodName(fieldName);\r\n+                Method getMethod;\r\n+                Method setMethod;\r\n+                try {\r\n+                    getMethod = clazz.getMethod(getMethodName);\r\n+                    if (getMethod.getReturnType().equals(throwable.getClass())) {\r\n+                        found = true;\r\n+                        setMethod = clazz.getMethod(setMethodName, throwable.getClass());\r\n+                        setMethod.invoke(resultObj, throwable);\r\n+                    }\r\n+                } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {\r\n+                    throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+                }\r\n+            }\r\n+\r\n+            if (!found) {\r\n+                applicationException = new TApplicationException(throwable.getMessage());\r\n+            }\r\n+\r\n+        } else {\r\n+            Object realResult = result.getValue();\r\n+            // result field id is 0\r\n+            String fieldName = resultObj.fieldForId(0).getFieldName();\r\n+            String setMethodName = ThriftUtils.generateSetMethodName(fieldName);\r\n+            String getMethodName = ThriftUtils.generateGetMethodName(fieldName);\r\n+            Method getMethod;\r\n+            Method setMethod;\r\n+            try {\r\n+                getMethod = clazz.getMethod(getMethodName);\r\n+                setMethod = clazz.getMethod(setMethodName, getMethod.getReturnType());\r\n+                setMethod.invoke(resultObj, realResult);\r\n+            } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {\r\n+                throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+            }\r\n+\r\n+        }\r\n+\r\n+        if (applicationException != null) {\r\n+            message = new TMessage(rd.methodName, TMessageType.EXCEPTION, rd.id);\r\n+        } else {\r\n+            message = new TMessage(rd.methodName, TMessageType.REPLY, rd.id);\r\n+        }\r\n+\r\n+        RandomAccessByteArrayOutputStream bos = new RandomAccessByteArrayOutputStream(1024);\r\n+\r\n+        TIOStreamTransport transport = new TIOStreamTransport(bos);\r\n+\r\n+        TBinaryProtocol protocol = new TBinaryProtocol(transport);\r\n+\r\n+        int messageLength;\r\n+        int headerLength;\r\n+\r\n+        byte[] bytes = new byte[4];\r\n+        try {\r\n+            // magic\r\n+            protocol.writeI16(MAGIC);\r\n+            // message length\r\n+            protocol.writeI32(Integer.MAX_VALUE);\r\n+            // message header length\r\n+            protocol.writeI16(Short.MAX_VALUE);\r\n+            // version\r\n+            protocol.writeByte(VERSION);\r\n+            // service name\r\n+            protocol.writeString(rd.serviceName);\r\n+            // id\r\n+            protocol.writeI64(response.getId());\r\n+            protocol.getTransport().flush();\r\n+            headerLength = bos.size();\r\n+\r\n+            // message\r\n+            protocol.writeMessageBegin(message);\r\n+            switch (message.type) {\r\n+                case TMessageType.EXCEPTION:\r\n+                    applicationException.write(protocol);\r\n+                    break;\r\n+                case TMessageType.REPLY:\r\n+                    resultObj.write(protocol);\r\n+                    break;\r\n+                default:\r\n+            }\r\n+            protocol.writeMessageEnd();\r\n+            protocol.getTransport().flush();\r\n+            int oldIndex = messageLength = bos.size();\r\n+\r\n+            try {\r\n+                TFramedTransport.encodeFrameSize(messageLength, bytes);\r\n+                bos.setWriteIndex(MESSAGE_LENGTH_INDEX);\r\n+                protocol.writeI32(messageLength);\r\n+                bos.setWriteIndex(MESSAGE_HEADER_LENGTH_INDEX);\r\n+                protocol.writeI16((short) (0xffff & headerLength));\r\n+            } finally {\r\n+                bos.setWriteIndex(oldIndex);\r\n+            }\r\n+\r\n+        } catch (TException e) {\r\n+            throw new RpcException(RpcException.SERIALIZATION_EXCEPTION, e.getMessage(), e);\r\n+        }\r\n+\r\n+        buffer.writeBytes(bytes);\r\n+        buffer.writeBytes(bos.toByteArray());\r\n+\r\n+    }\r\n+\r\n+    static class RequestData {\r\n+        int id;\r\n+        String serviceName;\r\n+        String methodName;\r\n+\r\n+        static RequestData create(int id, String sn, String mn) {\r\n+            RequestData result = new RequestData();\r\n+            result.id = id;\r\n+            result.serviceName = sn;\r\n+            result.methodName = mn;\r\n+            return result;\r\n+        }\r\n+\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/ThriftConstants.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/ThriftConstants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,32 +1,32 @@\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.rpc.protocol.thrift;\n-/**\n- * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\n- */\n-@Deprecated\n-public final class ThriftConstants {\n-\n-    public static final String THRIFT_PROTOCOL_KEY = \"thrift.protocol\";\n-    public static final String BINARY_THRIFT_PROTOCOL = \"binary\";\n-    public static final String CLASS_NAME_GENERATOR_KEY = \"class.name.generator\";\n-    public static final String DEFAULT_PROTOCOL = BINARY_THRIFT_PROTOCOL;\n-\n-    private ThriftConstants() {\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.rpc.protocol.thrift;\r\n+/**\r\n+ * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\r\n+ */\r\n+@Deprecated\r\n+public final class ThriftConstants {\r\n+\r\n+    public static final String THRIFT_PROTOCOL_KEY = \"thrift.protocol\";\r\n+    public static final String BINARY_THRIFT_PROTOCOL = \"binary\";\r\n+    public static final String CLASS_NAME_GENERATOR_KEY = \"class.name.generator\";\r\n+    public static final String DEFAULT_PROTOCOL = BINARY_THRIFT_PROTOCOL;\r\n+\r\n+    private ThriftConstants() {\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/ThriftInvoker.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/ThriftInvoker.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,171 +1,171 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.protocol.thrift;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.AtomicPositiveInteger;\n-import org.apache.dubbo.remoting.RemotingException;\n-import org.apache.dubbo.remoting.TimeoutException;\n-import org.apache.dubbo.remoting.exchange.ExchangeClient;\n-import org.apache.dubbo.rpc.AppResponse;\n-import org.apache.dubbo.rpc.AsyncRpcResult;\n-import org.apache.dubbo.rpc.FutureContext;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.Result;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.protocol.AbstractInvoker;\n-\n-import java.util.Set;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.ExecutorService;\n-import java.util.concurrent.locks.ReentrantLock;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_TIMEOUT;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\n-import static org.apache.dubbo.remoting.Constants.CHANNEL_ATTRIBUTE_READONLY_KEY;\n-import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\n-\n-\n-/**\n- * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\n- */\n-@Deprecated\n-public class ThriftInvoker<T> extends AbstractInvoker<T> {\n-\n-    private final ExchangeClient[] clients;\n-\n-    private final AtomicPositiveInteger index = new AtomicPositiveInteger();\n-\n-    private final ReentrantLock destroyLock = new ReentrantLock();\n-\n-    private final Set<Invoker<?>> invokers;\n-\n-    public ThriftInvoker(Class<T> service, URL url, ExchangeClient[] clients) {\n-        this(service, url, clients, null);\n-    }\n-\n-    public ThriftInvoker(Class<T> type, URL url, ExchangeClient[] clients, Set<Invoker<?>> invokers) {\n-        super(type, url, new String[]{INTERFACE_KEY, GROUP_KEY, TOKEN_KEY});\n-        this.clients = clients;\n-        this.invokers = invokers;\n-    }\n-\n-    @Override\n-    protected Result doInvoke(Invocation invocation) throws Throwable {\n-\n-        RpcInvocation inv = (RpcInvocation) invocation;\n-\n-        final String methodName;\n-\n-        methodName = invocation.getMethodName();\n-\n-        inv.setAttachment(PATH_KEY, getUrl().getPath());\n-\n-        // for thrift codec\n-        inv.setAttachment(ThriftCodec.PARAMETER_CLASS_NAME_GENERATOR, getUrl().getParameter(\n-                ThriftCodec.PARAMETER_CLASS_NAME_GENERATOR, DubboClassNameGenerator.NAME));\n-\n-        ExchangeClient currentClient;\n-\n-        if (clients.length == 1) {\n-            currentClient = clients[0];\n-        } else {\n-            currentClient = clients[index.getAndIncrement() % clients.length];\n-        }\n-\n-        try {\n-            int timeout = getUrl().getMethodParameter(methodName, TIMEOUT_KEY, DEFAULT_TIMEOUT);\n-\n-            ExecutorService executor = getCallbackExecutor(getUrl(), inv);\n-            CompletableFuture<AppResponse> appResponseFuture = currentClient.request(inv, timeout, executor).thenApply(obj -> (AppResponse) obj);\n-            // save for 2.6.x compatibility, for example, TraceFilter in Zipkin uses com.alibaba.xxx.FutureAdapter\n-            FutureContext.getContext().setCompatibleFuture(appResponseFuture);\n-            AsyncRpcResult result = new AsyncRpcResult(appResponseFuture, invocation);\n-            result.setExecutor(executor);\n-            return result;\n-        } catch (TimeoutException e) {\n-            throw new RpcException(RpcException.TIMEOUT_EXCEPTION, e.getMessage(), e);\n-        } catch (RemotingException e) {\n-            throw new RpcException(RpcException.NETWORK_EXCEPTION, e.getMessage(), e);\n-        }\n-\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-\n-        if (!super.isAvailable()) {\n-            return false;\n-        }\n-\n-        for (ExchangeClient client : clients) {\n-            if (client.isConnected()\n-                    && !client.hasAttribute(CHANNEL_ATTRIBUTE_READONLY_KEY)) {\n-                //cannot write == not Available ?\n-                return true;\n-            }\n-        }\n-        return false;\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        // in order to avoid closing a client multiple times, a counter is used in case of connection per jvm, every\n-        // time when client.close() is called, counter counts down once, and when counter reaches zero, client will be\n-        // closed.\n-        if (super.isDestroyed()) {\n-            return;\n-        } else {\n-            // double check to avoid dup close\n-            destroyLock.lock();\n-\n-            try {\n-\n-                if (super.isDestroyed()) {\n-                    return;\n-                }\n-\n-                super.destroy();\n-\n-                if (invokers != null) {\n-                    invokers.remove(this);\n-                }\n-\n-                for (ExchangeClient client : clients) {\n-\n-                    try {\n-                        client.close();\n-                    } catch (Throwable t) {\n-                        logger.warn(t.getMessage(), t);\n-                    }\n-\n-                }\n-\n-            } finally {\n-                destroyLock.unlock();\n-            }\n-\n-        }\n-\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.protocol.thrift;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.AtomicPositiveInteger;\r\n+import org.apache.dubbo.remoting.RemotingException;\r\n+import org.apache.dubbo.remoting.TimeoutException;\r\n+import org.apache.dubbo.remoting.exchange.ExchangeClient;\r\n+import org.apache.dubbo.rpc.AppResponse;\r\n+import org.apache.dubbo.rpc.AsyncRpcResult;\r\n+import org.apache.dubbo.rpc.FutureContext;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.Result;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.protocol.AbstractInvoker;\r\n+\r\n+import java.util.Set;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.ExecutorService;\r\n+import java.util.concurrent.locks.ReentrantLock;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_TIMEOUT;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.CHANNEL_ATTRIBUTE_READONLY_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\r\n+\r\n+\r\n+/**\r\n+ * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\r\n+ */\r\n+@Deprecated\r\n+public class ThriftInvoker<T> extends AbstractInvoker<T> {\r\n+\r\n+    private final ExchangeClient[] clients;\r\n+\r\n+    private final AtomicPositiveInteger index = new AtomicPositiveInteger();\r\n+\r\n+    private final ReentrantLock destroyLock = new ReentrantLock();\r\n+\r\n+    private final Set<Invoker<?>> invokers;\r\n+\r\n+    public ThriftInvoker(Class<T> service, URL url, ExchangeClient[] clients) {\r\n+        this(service, url, clients, null);\r\n+    }\r\n+\r\n+    public ThriftInvoker(Class<T> type, URL url, ExchangeClient[] clients, Set<Invoker<?>> invokers) {\r\n+        super(type, url, new String[]{INTERFACE_KEY, GROUP_KEY, TOKEN_KEY});\r\n+        this.clients = clients;\r\n+        this.invokers = invokers;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected Result doInvoke(Invocation invocation) throws Throwable {\r\n+\r\n+        RpcInvocation inv = (RpcInvocation) invocation;\r\n+\r\n+        final String methodName;\r\n+\r\n+        methodName = invocation.getMethodName();\r\n+\r\n+        inv.setAttachment(PATH_KEY, getUrl().getPath());\r\n+\r\n+        // for thrift codec\r\n+        inv.setAttachment(ThriftCodec.PARAMETER_CLASS_NAME_GENERATOR, getUrl().getParameter(\r\n+                ThriftCodec.PARAMETER_CLASS_NAME_GENERATOR, DubboClassNameGenerator.NAME));\r\n+\r\n+        ExchangeClient currentClient;\r\n+\r\n+        if (clients.length == 1) {\r\n+            currentClient = clients[0];\r\n+        } else {\r\n+            currentClient = clients[index.getAndIncrement() % clients.length];\r\n+        }\r\n+\r\n+        try {\r\n+            int timeout = getUrl().getMethodParameter(methodName, TIMEOUT_KEY, DEFAULT_TIMEOUT);\r\n+\r\n+            ExecutorService executor = getCallbackExecutor(getUrl(), inv);\r\n+            CompletableFuture<AppResponse> appResponseFuture = currentClient.request(inv, timeout, executor).thenApply(obj -> (AppResponse) obj);\r\n+            // save for 2.6.x compatibility, for example, TraceFilter in Zipkin uses com.alibaba.xxx.FutureAdapter\r\n+            FutureContext.getContext().setCompatibleFuture(appResponseFuture);\r\n+            AsyncRpcResult result = new AsyncRpcResult(appResponseFuture, invocation);\r\n+            result.setExecutor(executor);\r\n+            return result;\r\n+        } catch (TimeoutException e) {\r\n+            throw new RpcException(RpcException.TIMEOUT_EXCEPTION, e.getMessage(), e);\r\n+        } catch (RemotingException e) {\r\n+            throw new RpcException(RpcException.NETWORK_EXCEPTION, e.getMessage(), e);\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+\r\n+        if (!super.isAvailable()) {\r\n+            return false;\r\n+        }\r\n+\r\n+        for (ExchangeClient client : clients) {\r\n+            if (client.isConnected()\r\n+                    && !client.hasAttribute(CHANNEL_ATTRIBUTE_READONLY_KEY)) {\r\n+                //cannot write == not Available ?\r\n+                return true;\r\n+            }\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        // in order to avoid closing a client multiple times, a counter is used in case of connection per jvm, every\r\n+        // time when client.close() is called, counter counts down once, and when counter reaches zero, client will be\r\n+        // closed.\r\n+        if (super.isDestroyed()) {\r\n+            return;\r\n+        } else {\r\n+            // double check to avoid dup close\r\n+            destroyLock.lock();\r\n+\r\n+            try {\r\n+\r\n+                if (super.isDestroyed()) {\r\n+                    return;\r\n+                }\r\n+\r\n+                super.destroy();\r\n+\r\n+                if (invokers != null) {\r\n+                    invokers.remove(this);\r\n+                }\r\n+\r\n+                for (ExchangeClient client : clients) {\r\n+\r\n+                    try {\r\n+                        client.close();\r\n+                    } catch (Throwable t) {\r\n+                        logger.warn(t.getMessage(), t);\r\n+                    }\r\n+\r\n+                }\r\n+\r\n+            } finally {\r\n+                destroyLock.unlock();\r\n+            }\r\n+\r\n+        }\r\n+\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/ThriftNativeCodec.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/ThriftNativeCodec.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,96 +1,96 @@\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.rpc.protocol.thrift;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.Codec2;\n-import org.apache.dubbo.remoting.buffer.ChannelBuffer;\n-import org.apache.dubbo.remoting.buffer.ChannelBufferOutputStream;\n-import org.apache.dubbo.remoting.exchange.Request;\n-import org.apache.dubbo.remoting.exchange.Response;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.thrift.TException;\n-import org.apache.thrift.protocol.TBinaryProtocol;\n-import org.apache.thrift.protocol.TMessage;\n-import org.apache.thrift.protocol.TMessageType;\n-import org.apache.thrift.protocol.TProtocol;\n-import org.apache.thrift.protocol.TStruct;\n-import org.apache.thrift.transport.TIOStreamTransport;\n-\n-import java.io.IOException;\n-import java.util.concurrent.atomic.AtomicInteger;\n-/**\n- * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\n- */\n-@Deprecated\n-public class ThriftNativeCodec implements Codec2 {\n-\n-    private final AtomicInteger thriftSeq = new AtomicInteger(0);\n-\n-    protected static TProtocol newProtocol(URL url, ChannelBuffer buffer) throws IOException {\n-        String protocol = url.getParameter(ThriftConstants.THRIFT_PROTOCOL_KEY,\n-                ThriftConstants.DEFAULT_PROTOCOL);\n-        if (ThriftConstants.BINARY_THRIFT_PROTOCOL.equals(protocol)) {\n-            return new TBinaryProtocol(new TIOStreamTransport(new ChannelBufferOutputStream(buffer)));\n-        }\n-        throw new IOException(\"Unsupported protocol type \" + protocol);\n-    }\n-\n-    @Override\n-    public void encode(Channel channel, ChannelBuffer buffer, Object message)\n-            throws IOException {\n-        if (message instanceof Request) {\n-            encodeRequest(channel, buffer, (Request) message);\n-        } else if (message instanceof Response) {\n-            encodeResponse(channel, buffer, (Response) message);\n-        } else {\n-            throw new IOException(\"Unsupported message type \"\n-                    + message.getClass().getName());\n-        }\n-    }\n-\n-    protected void encodeRequest(Channel channel, ChannelBuffer buffer, Request request)\n-            throws IOException {\n-        Invocation invocation = (Invocation) request.getData();\n-        TProtocol protocol = newProtocol(channel.getUrl(), buffer);\n-        try {\n-            protocol.writeMessageBegin(new TMessage(\n-                    invocation.getMethodName(), TMessageType.CALL,\n-                    thriftSeq.getAndIncrement()));\n-            protocol.writeStructBegin(new TStruct(invocation.getMethodName() + \"_args\"));\n-            for (int i = 0; i < invocation.getParameterTypes().length; i++) {\n-                Class<?> type = invocation.getParameterTypes()[i];\n-\n-            }\n-        } catch (TException e) {\n-            throw new IOException(e.getMessage(), e);\n-        }\n-\n-    }\n-\n-    protected void encodeResponse(Channel channel, ChannelBuffer buffer, Response response)\n-            throws IOException {\n-\n-    }\n-\n-    @Override\n-    public Object decode(Channel channel, ChannelBuffer buffer) throws IOException {\n-        return null;\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.rpc.protocol.thrift;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.Codec2;\r\n+import org.apache.dubbo.remoting.buffer.ChannelBuffer;\r\n+import org.apache.dubbo.remoting.buffer.ChannelBufferOutputStream;\r\n+import org.apache.dubbo.remoting.exchange.Request;\r\n+import org.apache.dubbo.remoting.exchange.Response;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.thrift.TException;\r\n+import org.apache.thrift.protocol.TBinaryProtocol;\r\n+import org.apache.thrift.protocol.TMessage;\r\n+import org.apache.thrift.protocol.TMessageType;\r\n+import org.apache.thrift.protocol.TProtocol;\r\n+import org.apache.thrift.protocol.TStruct;\r\n+import org.apache.thrift.transport.TIOStreamTransport;\r\n+\r\n+import java.io.IOException;\r\n+import java.util.concurrent.atomic.AtomicInteger;\r\n+/**\r\n+ * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\r\n+ */\r\n+@Deprecated\r\n+public class ThriftNativeCodec implements Codec2 {\r\n+\r\n+    private final AtomicInteger thriftSeq = new AtomicInteger(0);\r\n+\r\n+    protected static TProtocol newProtocol(URL url, ChannelBuffer buffer) throws IOException {\r\n+        String protocol = url.getParameter(ThriftConstants.THRIFT_PROTOCOL_KEY,\r\n+                ThriftConstants.DEFAULT_PROTOCOL);\r\n+        if (ThriftConstants.BINARY_THRIFT_PROTOCOL.equals(protocol)) {\r\n+            return new TBinaryProtocol(new TIOStreamTransport(new ChannelBufferOutputStream(buffer)));\r\n+        }\r\n+        throw new IOException(\"Unsupported protocol type \" + protocol);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void encode(Channel channel, ChannelBuffer buffer, Object message)\r\n+            throws IOException {\r\n+        if (message instanceof Request) {\r\n+            encodeRequest(channel, buffer, (Request) message);\r\n+        } else if (message instanceof Response) {\r\n+            encodeResponse(channel, buffer, (Response) message);\r\n+        } else {\r\n+            throw new IOException(\"Unsupported message type \"\r\n+                    + message.getClass().getName());\r\n+        }\r\n+    }\r\n+\r\n+    protected void encodeRequest(Channel channel, ChannelBuffer buffer, Request request)\r\n+            throws IOException {\r\n+        Invocation invocation = (Invocation) request.getData();\r\n+        TProtocol protocol = newProtocol(channel.getUrl(), buffer);\r\n+        try {\r\n+            protocol.writeMessageBegin(new TMessage(\r\n+                    invocation.getMethodName(), TMessageType.CALL,\r\n+                    thriftSeq.getAndIncrement()));\r\n+            protocol.writeStructBegin(new TStruct(invocation.getMethodName() + \"_args\"));\r\n+            for (int i = 0; i < invocation.getParameterTypes().length; i++) {\r\n+                Class<?> type = invocation.getParameterTypes()[i];\r\n+\r\n+            }\r\n+        } catch (TException e) {\r\n+            throw new IOException(e.getMessage(), e);\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    protected void encodeResponse(Channel channel, ChannelBuffer buffer, Response response)\r\n+            throws IOException {\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object decode(Channel channel, ChannelBuffer buffer) throws IOException {\r\n+        return null;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/ThriftProtocol.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,272 +1,272 @@\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.rpc.protocol.thrift;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.config.ConfigurationUtils;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.RemotingException;\n-import org.apache.dubbo.remoting.RemotingServer;\n-import org.apache.dubbo.remoting.Transporter;\n-import org.apache.dubbo.remoting.exchange.ExchangeChannel;\n-import org.apache.dubbo.remoting.exchange.ExchangeClient;\n-import org.apache.dubbo.remoting.exchange.ExchangeHandler;\n-import org.apache.dubbo.remoting.exchange.ExchangeServer;\n-import org.apache.dubbo.remoting.exchange.Exchangers;\n-import org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter;\n-import org.apache.dubbo.rpc.Exporter;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.ProtocolServer;\n-import org.apache.dubbo.rpc.Result;\n-import org.apache.dubbo.rpc.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.protocol.AbstractProtocol;\n-import org.apache.dubbo.rpc.protocol.dubbo.DubboExporter;\n-\n-import java.util.ArrayList;\n-import java.util.Set;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.function.Function;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\n-import static org.apache.dubbo.remoting.Constants.CHANNEL_READONLYEVENT_SENT_KEY;\n-import static org.apache.dubbo.remoting.Constants.CLIENT_KEY;\n-import static org.apache.dubbo.remoting.Constants.CODEC_KEY;\n-import static org.apache.dubbo.remoting.Constants.CONNECTIONS_KEY;\n-import static org.apache.dubbo.remoting.Constants.SERVER_KEY;\n-import static org.apache.dubbo.rpc.Constants.IS_SERVER_KEY;\n-\n-/**\n- * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\n- */\n-@Deprecated\n-public class ThriftProtocol extends AbstractProtocol {\n-\n-    public static final int DEFAULT_PORT = 40880;\n-\n-    public static final String NAME = \"thrift\";\n-\n-    private ExchangeHandler handler = new ExchangeHandlerAdapter() {\n-\n-        @Override\n-        public CompletableFuture<Object> reply(ExchangeChannel channel, Object msg) throws RemotingException {\n-\n-            if (msg instanceof Invocation) {\n-                Invocation inv = (Invocation) msg;\n-                String path = (String) inv.getObjectAttachments().get(PATH_KEY);\n-                String serviceKey = serviceKey(channel.getLocalAddress().getPort(),\n-                        path, null, null);\n-                DubboExporter<?> exporter = (DubboExporter<?>) exporterMap.get(serviceKey);\n-                if (exporter == null) {\n-                    throw new RemotingException(channel,\n-                            \"Not found exported service: \"\n-                                    + serviceKey\n-                                    + \" in \"\n-                                    + exporterMap.keySet()\n-                                    + \", may be version or group mismatch \"\n-                                    + \", channel: consumer: \"\n-                                    + channel.getRemoteAddress()\n-                                    + \" --> provider: \"\n-                                    + channel.getLocalAddress()\n-                                    + \", message:\" + msg);\n-                }\n-\n-                RpcContext.getContext().setRemoteAddress(channel.getRemoteAddress());\n-\n-                Result result = exporter.getInvoker().invoke(inv);\n-                return result.thenApply(Function.identity());\n-            }\n-\n-            throw new RemotingException(channel,\n-                    \"Unsupported request: \"\n-                            + (msg.getClass().getName() + \": \" + msg)\n-                            + \", channel: consumer: \"\n-                            + channel.getRemoteAddress()\n-                            + \" --> provider: \"\n-                            + channel.getLocalAddress());\n-        }\n-\n-        @Override\n-        public void received(Channel channel, Object message) throws RemotingException {\n-            if (message instanceof Invocation) {\n-                reply((ExchangeChannel) channel, message);\n-            } else {\n-                super.received(channel, message);\n-            }\n-        }\n-\n-    };\n-\n-    @Override\n-    public int getDefaultPort() {\n-        return DEFAULT_PORT;\n-    }\n-\n-    @Override\n-    public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException {\n-\n-        // can use thrift codec only\n-        URL url = invoker.getUrl().addParameter(CODEC_KEY, ThriftCodec.NAME);\n-        // find server.\n-        String key = url.getAddress();\n-        // client can expose a service for server to invoke only.\n-        boolean isServer = url.getParameter(IS_SERVER_KEY, true);\n-        if (isServer && !serverMap.containsKey(key)) {\n-            serverMap.put(key, getServer(url));\n-        }\n-        // export service.\n-        key = serviceKey(url);\n-        DubboExporter<T> exporter = new DubboExporter<T>(invoker, key, exporterMap);\n-        exporterMap.put(key, exporter);\n-\n-        return exporter;\n-    }\n-\n-    @Override\n-    public void destroy() {\n-\n-        super.destroy();\n-\n-        for (String key : new ArrayList<String>(serverMap.keySet())) {\n-\n-            ProtocolServer protocolServer = serverMap.remove(key);\n-\n-            if (protocolServer != null) {\n-                RemotingServer server = protocolServer.getRemotingServer();\n-                try {\n-                    if (logger.isInfoEnabled()) {\n-                        logger.info(\"Close dubbo server: \" + server.getLocalAddress());\n-                    }\n-                    server.close(ConfigurationUtils.getServerShutdownTimeout());\n-                } catch (Throwable t) {\n-                    logger.warn(t.getMessage(), t);\n-                }\n-            } // ~ end of if ( server != null )\n-\n-        } // ~ end of loop serverMap\n-\n-    } // ~ end of method destroy\n-\n-    @Override\n-    protected <T> Invoker<T> protocolBindingRefer(Class<T> type, URL url) throws RpcException {\n-\n-        ThriftInvoker<T> invoker = new ThriftInvoker<T>(type, url, getClients(url), invokers);\n-\n-        invokers.add(invoker);\n-\n-        return invoker;\n-\n-    }\n-\n-    private ExchangeClient[] getClients(URL url) {\n-\n-        int connections = url.getParameter(CONNECTIONS_KEY, 1);\n-\n-        ExchangeClient[] clients = new ExchangeClient[connections];\n-\n-        for (int i = 0; i < clients.length; i++) {\n-            clients[i] = initClient(url);\n-        }\n-        return clients;\n-    }\n-\n-    private ExchangeClient initClient(URL url) {\n-\n-        ExchangeClient client;\n-\n-//        url = url.addParameter(CODEC_KEY, ThriftCodec.NAME);\n-\n-        try {\n-            client = Exchangers.connect(url);\n-        } catch (RemotingException e) {\n-            throw new RpcException(\"Fail to create remoting client for service(\" + url\n-                    + \"): \" + e.getMessage(), e);\n-        }\n-\n-        return client;\n-\n-    }\n-\n-    private ProtocolServer getServer(URL url) {\n-        // enable sending readonly event when server closes by default\n-        url = url.addParameterIfAbsent(CHANNEL_READONLYEVENT_SENT_KEY, Boolean.TRUE.toString());\n-        String str = url.getParameter(SERVER_KEY, org.apache.dubbo.rpc.Constants.DEFAULT_REMOTING_SERVER);\n-\n-        if (str != null && str.length() > 0 && !ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(str)) {\n-            throw new RpcException(\"Unsupported server type: \" + str + \", url: \" + url);\n-        }\n-\n-        ExchangeServer server;\n-        try {\n-            server = Exchangers.bind(url, handler);\n-        } catch (RemotingException e) {\n-            throw new RpcException(\"Fail to start server(url: \" + url + \") \" + e.getMessage(), e);\n-        }\n-        str = url.getParameter(CLIENT_KEY);\n-        if (str != null && str.length() > 0) {\n-            Set<String> supportedTypes = ExtensionLoader.getExtensionLoader(Transporter.class).getSupportedExtensions();\n-            if (!supportedTypes.contains(str)) {\n-                throw new RpcException(\"Unsupported client type: \" + str);\n-            }\n-        }\n-        return new ThriftProtocolServer(server);\n-    }\n-\n-    private class ThriftProtocolServer implements ProtocolServer {\n-\n-        private ExchangeServer server;\n-        private String address;\n-\n-        public ThriftProtocolServer(ExchangeServer server) {\n-            this.server = server;\n-        }\n-\n-        @Override\n-        public RemotingServer getRemotingServer() {\n-            return server;\n-        }\n-\n-        @Override\n-        public String getAddress() {\n-            return StringUtils.isNotEmpty(address) ? address : server.getUrl().getAddress();\n-        }\n-\n-        @Override\n-        public void setAddress(String address) {\n-            this.address = address;\n-        }\n-\n-        @Override\n-        public URL getUrl() {\n-            return server.getUrl();\n-        }\n-\n-        @Override\n-        public void reset(URL url) {\n-            server.reset(url);\n-        }\n-\n-        @Override\n-        public void close() {\n-            server.close();\n-        }\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.protocol.thrift;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.config.ConfigurationUtils;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.RemotingException;\r\n+import org.apache.dubbo.remoting.RemotingServer;\r\n+import org.apache.dubbo.remoting.Transporter;\r\n+import org.apache.dubbo.remoting.exchange.ExchangeChannel;\r\n+import org.apache.dubbo.remoting.exchange.ExchangeClient;\r\n+import org.apache.dubbo.remoting.exchange.ExchangeHandler;\r\n+import org.apache.dubbo.remoting.exchange.ExchangeServer;\r\n+import org.apache.dubbo.remoting.exchange.Exchangers;\r\n+import org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter;\r\n+import org.apache.dubbo.rpc.Exporter;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.ProtocolServer;\r\n+import org.apache.dubbo.rpc.Result;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.protocol.AbstractProtocol;\r\n+import org.apache.dubbo.rpc.protocol.dubbo.DubboExporter;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Set;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.function.Function;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PATH_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.CHANNEL_READONLYEVENT_SENT_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.CLIENT_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.CODEC_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.CONNECTIONS_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.SERVER_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.IS_SERVER_KEY;\r\n+\r\n+/**\r\n+ * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\r\n+ */\r\n+@Deprecated\r\n+public class ThriftProtocol extends AbstractProtocol {\r\n+\r\n+    public static final int DEFAULT_PORT = 40880;\r\n+\r\n+    public static final String NAME = \"thrift\";\r\n+\r\n+    private ExchangeHandler handler = new ExchangeHandlerAdapter() {\r\n+\r\n+        @Override\r\n+        public CompletableFuture<Object> reply(ExchangeChannel channel, Object msg) throws RemotingException {\r\n+\r\n+            if (msg instanceof Invocation) {\r\n+                Invocation inv = (Invocation) msg;\r\n+                String path = (String) inv.getObjectAttachments().get(PATH_KEY);\r\n+                String serviceKey = serviceKey(channel.getLocalAddress().getPort(),\r\n+                        path, null, null);\r\n+                DubboExporter<?> exporter = (DubboExporter<?>) exporterMap.get(serviceKey);\r\n+                if (exporter == null) {\r\n+                    throw new RemotingException(channel,\r\n+                            \"Not found exported service: \"\r\n+                                    + serviceKey\r\n+                                    + \" in \"\r\n+                                    + exporterMap.keySet()\r\n+                                    + \", may be version or group mismatch \"\r\n+                                    + \", channel: consumer: \"\r\n+                                    + channel.getRemoteAddress()\r\n+                                    + \" --> provider: \"\r\n+                                    + channel.getLocalAddress()\r\n+                                    + \", message:\" + msg);\r\n+                }\r\n+\r\n+                RpcContext.getContext().setRemoteAddress(channel.getRemoteAddress());\r\n+\r\n+                Result result = exporter.getInvoker().invoke(inv);\r\n+                return result.thenApply(Function.identity());\r\n+            }\r\n+\r\n+            throw new RemotingException(channel,\r\n+                    \"Unsupported request: \"\r\n+                            + (msg.getClass().getName() + \": \" + msg)\r\n+                            + \", channel: consumer: \"\r\n+                            + channel.getRemoteAddress()\r\n+                            + \" --> provider: \"\r\n+                            + channel.getLocalAddress());\r\n+        }\r\n+\r\n+        @Override\r\n+        public void received(Channel channel, Object message) throws RemotingException {\r\n+            if (message instanceof Invocation) {\r\n+                reply((ExchangeChannel) channel, message);\r\n+            } else {\r\n+                super.received(channel, message);\r\n+            }\r\n+        }\r\n+\r\n+    };\r\n+\r\n+    @Override\r\n+    public int getDefaultPort() {\r\n+        return DEFAULT_PORT;\r\n+    }\r\n+\r\n+    @Override\r\n+    public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException {\r\n+\r\n+        // can use thrift codec only\r\n+        URL url = invoker.getUrl().addParameter(CODEC_KEY, ThriftCodec.NAME);\r\n+        // find server.\r\n+        String key = url.getAddress();\r\n+        // client can expose a service for server to invoke only.\r\n+        boolean isServer = url.getParameter(IS_SERVER_KEY, true);\r\n+        if (isServer && !serverMap.containsKey(key)) {\r\n+            serverMap.put(key, getServer(url));\r\n+        }\r\n+        // export service.\r\n+        key = serviceKey(url);\r\n+        DubboExporter<T> exporter = new DubboExporter<T>(invoker, key, exporterMap);\r\n+        exporterMap.put(key, exporter);\r\n+\r\n+        return exporter;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+\r\n+        super.destroy();\r\n+\r\n+        for (String key : new ArrayList<String>(serverMap.keySet())) {\r\n+\r\n+            ProtocolServer protocolServer = serverMap.remove(key);\r\n+\r\n+            if (protocolServer != null) {\r\n+                RemotingServer server = protocolServer.getRemotingServer();\r\n+                try {\r\n+                    if (logger.isInfoEnabled()) {\r\n+                        logger.info(\"Close dubbo server: \" + server.getLocalAddress());\r\n+                    }\r\n+                    server.close(ConfigurationUtils.getServerShutdownTimeout());\r\n+                } catch (Throwable t) {\r\n+                    logger.warn(t.getMessage(), t);\r\n+                }\r\n+            } // ~ end of if ( server != null )\r\n+\r\n+        } // ~ end of loop serverMap\r\n+\r\n+    } // ~ end of method destroy\r\n+\r\n+    @Override\r\n+    protected <T> Invoker<T> protocolBindingRefer(Class<T> type, URL url) throws RpcException {\r\n+\r\n+        ThriftInvoker<T> invoker = new ThriftInvoker<T>(type, url, getClients(url), invokers);\r\n+\r\n+        invokers.add(invoker);\r\n+\r\n+        return invoker;\r\n+\r\n+    }\r\n+\r\n+    private ExchangeClient[] getClients(URL url) {\r\n+\r\n+        int connections = url.getParameter(CONNECTIONS_KEY, 1);\r\n+\r\n+        ExchangeClient[] clients = new ExchangeClient[connections];\r\n+\r\n+        for (int i = 0; i < clients.length; i++) {\r\n+            clients[i] = initClient(url);\r\n+        }\r\n+        return clients;\r\n+    }\r\n+\r\n+    private ExchangeClient initClient(URL url) {\r\n+\r\n+        ExchangeClient client;\r\n+\r\n+//        url = url.addParameter(CODEC_KEY, ThriftCodec.NAME);\r\n+\r\n+        try {\r\n+            client = Exchangers.connect(url);\r\n+        } catch (RemotingException e) {\r\n+            throw new RpcException(\"Fail to create remoting client for service(\" + url\r\n+                    + \"): \" + e.getMessage(), e);\r\n+        }\r\n+\r\n+        return client;\r\n+\r\n+    }\r\n+\r\n+    private ProtocolServer getServer(URL url) {\r\n+        // enable sending readonly event when server closes by default\r\n+        url = url.addParameterIfAbsent(CHANNEL_READONLYEVENT_SENT_KEY, Boolean.TRUE.toString());\r\n+        String str = url.getParameter(SERVER_KEY, org.apache.dubbo.rpc.Constants.DEFAULT_REMOTING_SERVER);\r\n+\r\n+        if (str != null && str.length() > 0 && !ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(str)) {\r\n+            throw new RpcException(\"Unsupported server type: \" + str + \", url: \" + url);\r\n+        }\r\n+\r\n+        ExchangeServer server;\r\n+        try {\r\n+            server = Exchangers.bind(url, handler);\r\n+        } catch (RemotingException e) {\r\n+            throw new RpcException(\"Fail to start server(url: \" + url + \") \" + e.getMessage(), e);\r\n+        }\r\n+        str = url.getParameter(CLIENT_KEY);\r\n+        if (str != null && str.length() > 0) {\r\n+            Set<String> supportedTypes = ExtensionLoader.getExtensionLoader(Transporter.class).getSupportedExtensions();\r\n+            if (!supportedTypes.contains(str)) {\r\n+                throw new RpcException(\"Unsupported client type: \" + str);\r\n+            }\r\n+        }\r\n+        return new ThriftProtocolServer(server);\r\n+    }\r\n+\r\n+    private class ThriftProtocolServer implements ProtocolServer {\r\n+\r\n+        private ExchangeServer server;\r\n+        private String address;\r\n+\r\n+        public ThriftProtocolServer(ExchangeServer server) {\r\n+            this.server = server;\r\n+        }\r\n+\r\n+        @Override\r\n+        public RemotingServer getRemotingServer() {\r\n+            return server;\r\n+        }\r\n+\r\n+        @Override\r\n+        public String getAddress() {\r\n+            return StringUtils.isNotEmpty(address) ? address : server.getUrl().getAddress();\r\n+        }\r\n+\r\n+        @Override\r\n+        public void setAddress(String address) {\r\n+            this.address = address;\r\n+        }\r\n+\r\n+        @Override\r\n+        public URL getUrl() {\r\n+            return server.getUrl();\r\n+        }\r\n+\r\n+        @Override\r\n+        public void reset(URL url) {\r\n+            server.reset(url);\r\n+        }\r\n+\r\n+        @Override\r\n+        public void close() {\r\n+            server.close();\r\n+        }\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/ThriftType.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/ThriftType.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,51 +1,51 @@\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.rpc.protocol.thrift;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-/**\n- * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\n- */\n-@Deprecated\n-public enum ThriftType {\n-\n-    BOOL, BYTE, I16, I32, I64, DOUBLE, STRING;\n-\n-    private static final Map<Class<?>, ThriftType> TYPES =\n-            new HashMap<Class<?>, ThriftType>();\n-\n-    static {\n-        put(boolean.class, BOOL);\n-        put(Boolean.class, BOOL);\n-        put(byte.class, BYTE);\n-        put(Byte.class, BYTE);\n-        put(short.class, I16);\n-    }\n-\n-    public static ThriftType get(Class<?> key) {\n-        if (key != null) {\n-            return TYPES.get(key);\n-        }\n-        throw new NullPointerException(\"key == null\");\n-    }\n-\n-    private static void put(Class<?> key, ThriftType value) {\n-        TYPES.put(key, value);\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.rpc.protocol.thrift;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+/**\r\n+ * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\r\n+ */\r\n+@Deprecated\r\n+public enum ThriftType {\r\n+\r\n+    BOOL, BYTE, I16, I32, I64, DOUBLE, STRING;\r\n+\r\n+    private static final Map<Class<?>, ThriftType> TYPES =\r\n+            new HashMap<Class<?>, ThriftType>();\r\n+\r\n+    static {\r\n+        put(boolean.class, BOOL);\r\n+        put(Boolean.class, BOOL);\r\n+        put(byte.class, BYTE);\r\n+        put(Byte.class, BYTE);\r\n+        put(short.class, I16);\r\n+    }\r\n+\r\n+    public static ThriftType get(Class<?> key) {\r\n+        if (key != null) {\r\n+            return TYPES.get(key);\r\n+        }\r\n+        throw new NullPointerException(\"key == null\");\r\n+    }\r\n+\r\n+    private static void put(Class<?> key, ThriftType value) {\r\n+        TYPES.put(key, value);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/ThriftUtils.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/ThriftUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,135 +1,135 @@\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.rpc.protocol.thrift;\n-/**\n- * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\n- */\n-@Deprecated\n-public class ThriftUtils {\n-\n-    /**\n-     * Generate class name which represents service arguments.\n-     *\n-     * @param serviceName service name\n-     * @param methodName method name\n-     * @return method args class name or null\n-     */\n-    public static String generateMethodArgsClassName(String serviceName, String methodName) {\n-\n-        int index = serviceName.lastIndexOf(\".\");\n-\n-        if (index > 0) {\n-\n-            return new StringBuilder(32)\n-                    .append(serviceName, 0, index + 1)\n-                    .append(\"$__\")\n-                    .append(serviceName.substring(index + 1))\n-                    .append(\"Stub$\")\n-                    .append(methodName)\n-                    .append(\"_args\")\n-                    .toString();\n-\n-        } else {\n-            return new StringBuffer(32)\n-                    .append(\"$__\")\n-                    .append(serviceName)\n-                    .append(\"Stub$\")\n-                    .append(methodName)\n-                    .append(\"_args\")\n-                    .toString();\n-        }\n-\n-    }\n-\n-    public static String generateMethodResultClassName(String serviceName, String method) {\n-\n-        int index = serviceName.lastIndexOf(\".\");\n-\n-        if (index > 0) {\n-\n-            return new StringBuilder(32)\n-                    .append(serviceName, 0, index + 1)\n-                    .append(\"$__\")\n-                    .append(serviceName.substring(index + 1))\n-                    .append(\"Stub$\")\n-                    .append(method)\n-                    .append(\"_result\")\n-                    .toString();\n-\n-        } else {\n-            return new StringBuilder(32)\n-                    .append(\"$__\")\n-                    .append(serviceName)\n-                    .append(\"Stub$\")\n-                    .append(method)\n-                    .append(\"_result\")\n-                    .toString();\n-        }\n-\n-    }\n-\n-    public static String generateSetMethodName(String fieldName) {\n-\n-        return new StringBuilder(16)\n-                .append(\"set\")\n-                .append(Character.toUpperCase(fieldName.charAt(0)))\n-                .append(fieldName.substring(1))\n-                .toString();\n-\n-    }\n-\n-    public static String generateGetMethodName(String fieldName) {\n-        return new StringBuffer(16)\n-                .append(\"get\")\n-                .append(Character.toUpperCase(fieldName.charAt(0)))\n-                .append(fieldName.substring(1))\n-                .toString();\n-    }\n-\n-    public static String generateMethodArgsClassNameThrift(String serviceName, String methodName) {\n-\n-        int index = serviceName.indexOf(\"$\");\n-\n-        if (index > 0) {\n-            return new StringBuilder(32)\n-                    .append(serviceName, 0, index + 1)\n-                    .append(methodName)\n-                    .append(\"_args\")\n-                    .toString();\n-        }\n-\n-        return null;\n-\n-    }\n-\n-    public static String generateMethodResultClassNameThrift(String serviceName, String methodName) {\n-\n-        int index = serviceName.indexOf(\"$\");\n-\n-        if (index > 0) {\n-            return new StringBuilder(32)\n-                    .append(serviceName, 0, index + 1)\n-                    .append(methodName)\n-                    .append(\"_result\")\n-                    .toString();\n-        }\n-\n-        return null;\n-\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.protocol.thrift;\r\n+/**\r\n+ * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift instead\r\n+ */\r\n+@Deprecated\r\n+public class ThriftUtils {\r\n+\r\n+    /**\r\n+     * Generate class name which represents service arguments.\r\n+     *\r\n+     * @param serviceName service name\r\n+     * @param methodName method name\r\n+     * @return method args class name or null\r\n+     */\r\n+    public static String generateMethodArgsClassName(String serviceName, String methodName) {\r\n+\r\n+        int index = serviceName.lastIndexOf(\".\");\r\n+\r\n+        if (index > 0) {\r\n+\r\n+            return new StringBuilder(32)\r\n+                    .append(serviceName, 0, index + 1)\r\n+                    .append(\"$__\")\r\n+                    .append(serviceName.substring(index + 1))\r\n+                    .append(\"Stub$\")\r\n+                    .append(methodName)\r\n+                    .append(\"_args\")\r\n+                    .toString();\r\n+\r\n+        } else {\r\n+            return new StringBuffer(32)\r\n+                    .append(\"$__\")\r\n+                    .append(serviceName)\r\n+                    .append(\"Stub$\")\r\n+                    .append(methodName)\r\n+                    .append(\"_args\")\r\n+                    .toString();\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    public static String generateMethodResultClassName(String serviceName, String method) {\r\n+\r\n+        int index = serviceName.lastIndexOf(\".\");\r\n+\r\n+        if (index > 0) {\r\n+\r\n+            return new StringBuilder(32)\r\n+                    .append(serviceName, 0, index + 1)\r\n+                    .append(\"$__\")\r\n+                    .append(serviceName.substring(index + 1))\r\n+                    .append(\"Stub$\")\r\n+                    .append(method)\r\n+                    .append(\"_result\")\r\n+                    .toString();\r\n+\r\n+        } else {\r\n+            return new StringBuilder(32)\r\n+                    .append(\"$__\")\r\n+                    .append(serviceName)\r\n+                    .append(\"Stub$\")\r\n+                    .append(method)\r\n+                    .append(\"_result\")\r\n+                    .toString();\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    public static String generateSetMethodName(String fieldName) {\r\n+\r\n+        return new StringBuilder(16)\r\n+                .append(\"set\")\r\n+                .append(Character.toUpperCase(fieldName.charAt(0)))\r\n+                .append(fieldName.substring(1))\r\n+                .toString();\r\n+\r\n+    }\r\n+\r\n+    public static String generateGetMethodName(String fieldName) {\r\n+        return new StringBuffer(16)\r\n+                .append(\"get\")\r\n+                .append(Character.toUpperCase(fieldName.charAt(0)))\r\n+                .append(fieldName.substring(1))\r\n+                .toString();\r\n+    }\r\n+\r\n+    public static String generateMethodArgsClassNameThrift(String serviceName, String methodName) {\r\n+\r\n+        int index = serviceName.indexOf(\"$\");\r\n+\r\n+        if (index > 0) {\r\n+            return new StringBuilder(32)\r\n+                    .append(serviceName, 0, index + 1)\r\n+                    .append(methodName)\r\n+                    .append(\"_args\")\r\n+                    .toString();\r\n+        }\r\n+\r\n+        return null;\r\n+\r\n+    }\r\n+\r\n+    public static String generateMethodResultClassNameThrift(String serviceName, String methodName) {\r\n+\r\n+        int index = serviceName.indexOf(\"$\");\r\n+\r\n+        if (index > 0) {\r\n+            return new StringBuilder(32)\r\n+                    .append(serviceName, 0, index + 1)\r\n+                    .append(methodName)\r\n+                    .append(\"_result\")\r\n+                    .toString();\r\n+        }\r\n+\r\n+        return null;\r\n+\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/ext/MultiServiceProcessor.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/ext/MultiServiceProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,121 +1,121 @@\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.rpc.protocol.thrift.ext;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.rpc.protocol.thrift.ThriftCodec;\n-import org.apache.thrift.TException;\n-import org.apache.thrift.TProcessor;\n-import org.apache.thrift.protocol.TBinaryProtocol;\n-import org.apache.thrift.protocol.TProtocol;\n-import org.apache.thrift.protocol.TProtocolFactory;\n-import org.apache.thrift.transport.TIOStreamTransport;\n-\n-import java.io.ByteArrayOutputStream;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-/**\n- * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift to instead of this module\n- */\n-@Deprecated\n-public class MultiServiceProcessor implements TProcessor {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(MultiServiceProcessor.class);\n-\n-    private ConcurrentMap<String, TProcessor> processorMap = new ConcurrentHashMap<String, TProcessor>();\n-\n-    private TProtocolFactory protocolFactory = new TBinaryProtocol.Factory();\n-\n-    public MultiServiceProcessor() {\n-    }\n-\n-    @Override\n-    public boolean process(TProtocol in, TProtocol out) throws TException {\n-\n-        short magic = in.readI16();\n-\n-        if (magic != ThriftCodec.MAGIC) {\n-            logger.error(\"Unsupported magic \" + magic);\n-            return false;\n-        }\n-\n-        in.readI32();\n-        in.readI16();\n-        byte version = in.readByte();\n-        String serviceName = in.readString();\n-        long id = in.readI64();\n-\n-        ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);\n-\n-        TIOStreamTransport transport = new TIOStreamTransport(bos);\n-\n-        TProtocol protocol = protocolFactory.getProtocol(transport);\n-\n-        TProcessor processor = processorMap.get(serviceName);\n-\n-        if (processor == null) {\n-            logger.error(\"Could not find processor for service \" + serviceName);\n-            return false;\n-        }\n-\n-        // todo if exception\n-        boolean result = processor.process(in, protocol);\n-\n-        ByteArrayOutputStream header = new ByteArrayOutputStream(512);\n-\n-        TIOStreamTransport headerTransport = new TIOStreamTransport(header);\n-\n-        TProtocol headerProtocol = protocolFactory.getProtocol(headerTransport);\n-\n-        headerProtocol.writeI16(magic);\n-        headerProtocol.writeI32(Integer.MAX_VALUE);\n-        headerProtocol.writeI16(Short.MAX_VALUE);\n-        headerProtocol.writeByte(version);\n-        headerProtocol.writeString(serviceName);\n-        headerProtocol.writeI64(id);\n-        headerProtocol.getTransport().flush();\n-\n-        out.writeI16(magic);\n-        out.writeI32(bos.size() + header.size());\n-        out.writeI16((short) (0xffff & header.size()));\n-        out.writeByte(version);\n-        out.writeString(serviceName);\n-        out.writeI64(id);\n-\n-        out.getTransport().write(bos.toByteArray());\n-        out.getTransport().flush();\n-\n-        return result;\n-\n-    }\n-\n-    public TProcessor addProcessor(Class service, TProcessor processor) {\n-        if (service != null && processor != null) {\n-            return processorMap.putIfAbsent(service.getName(), processor);\n-        }\n-        return processor;\n-    }\n-\n-    public void setProtocolFactory(TProtocolFactory factory) {\n-        if (factory != null) {\n-            this.protocolFactory = factory;\n-        }\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc.protocol.thrift.ext;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.rpc.protocol.thrift.ThriftCodec;\r\n+import org.apache.thrift.TException;\r\n+import org.apache.thrift.TProcessor;\r\n+import org.apache.thrift.protocol.TBinaryProtocol;\r\n+import org.apache.thrift.protocol.TProtocol;\r\n+import org.apache.thrift.protocol.TProtocolFactory;\r\n+import org.apache.thrift.transport.TIOStreamTransport;\r\n+\r\n+import java.io.ByteArrayOutputStream;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+/**\r\n+ * @since 2.7.0, use https://github.com/dubbo/dubbo-rpc-native-thrift to instead of this module\r\n+ */\r\n+@Deprecated\r\n+public class MultiServiceProcessor implements TProcessor {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(MultiServiceProcessor.class);\r\n+\r\n+    private ConcurrentMap<String, TProcessor> processorMap = new ConcurrentHashMap<String, TProcessor>();\r\n+\r\n+    private TProtocolFactory protocolFactory = new TBinaryProtocol.Factory();\r\n+\r\n+    public MultiServiceProcessor() {\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean process(TProtocol in, TProtocol out) throws TException {\r\n+\r\n+        short magic = in.readI16();\r\n+\r\n+        if (magic != ThriftCodec.MAGIC) {\r\n+            logger.error(\"Unsupported magic \" + magic);\r\n+            return false;\r\n+        }\r\n+\r\n+        in.readI32();\r\n+        in.readI16();\r\n+        byte version = in.readByte();\r\n+        String serviceName = in.readString();\r\n+        long id = in.readI64();\r\n+\r\n+        ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);\r\n+\r\n+        TIOStreamTransport transport = new TIOStreamTransport(bos);\r\n+\r\n+        TProtocol protocol = protocolFactory.getProtocol(transport);\r\n+\r\n+        TProcessor processor = processorMap.get(serviceName);\r\n+\r\n+        if (processor == null) {\r\n+            logger.error(\"Could not find processor for service \" + serviceName);\r\n+            return false;\r\n+        }\r\n+\r\n+        // todo if exception\r\n+        boolean result = processor.process(in, protocol);\r\n+\r\n+        ByteArrayOutputStream header = new ByteArrayOutputStream(512);\r\n+\r\n+        TIOStreamTransport headerTransport = new TIOStreamTransport(header);\r\n+\r\n+        TProtocol headerProtocol = protocolFactory.getProtocol(headerTransport);\r\n+\r\n+        headerProtocol.writeI16(magic);\r\n+        headerProtocol.writeI32(Integer.MAX_VALUE);\r\n+        headerProtocol.writeI16(Short.MAX_VALUE);\r\n+        headerProtocol.writeByte(version);\r\n+        headerProtocol.writeString(serviceName);\r\n+        headerProtocol.writeI64(id);\r\n+        headerProtocol.getTransport().flush();\r\n+\r\n+        out.writeI16(magic);\r\n+        out.writeI32(bos.size() + header.size());\r\n+        out.writeI16((short) (0xffff & header.size()));\r\n+        out.writeByte(version);\r\n+        out.writeString(serviceName);\r\n+        out.writeI64(id);\r\n+\r\n+        out.getTransport().write(bos.toByteArray());\r\n+        out.getTransport().flush();\r\n+\r\n+        return result;\r\n+\r\n+    }\r\n+\r\n+    public TProcessor addProcessor(Class service, TProcessor processor) {\r\n+        if (service != null && processor != null) {\r\n+            return processorMap.putIfAbsent(service.getName(), processor);\r\n+        }\r\n+        return processor;\r\n+    }\r\n+\r\n+    public void setProtocolFactory(TProtocolFactory factory) {\r\n+        if (factory != null) {\r\n+            this.protocolFactory = factory;\r\n+        }\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/thrift/io/RandomAccessByteArrayOutputStream.java", "source2": "org/apache/dubbo/rpc/protocol/thrift/io/RandomAccessByteArrayOutputStream.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,117 +1,117 @@\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.rpc.protocol.thrift.io;\n-\n-import org.apache.dubbo.common.io.Bytes;\n-\n-import java.io.IOException;\n-import java.io.OutputStream;\n-import java.io.UnsupportedEncodingException;\n-import java.nio.ByteBuffer;\n-@Deprecated\n-public class RandomAccessByteArrayOutputStream extends OutputStream {\n-\n-    protected byte[] buffer;\n-\n-    protected int count;\n-\n-    public RandomAccessByteArrayOutputStream() {\n-\n-        this(32);\n-    }\n-\n-    public RandomAccessByteArrayOutputStream(int size) {\n-\n-        if (size < 0) {\n-            throw new IllegalArgumentException(\"Negative initial size: \" + size);\n-        }\n-        buffer = new byte[size];\n-    }\n-\n-    @Override\n-    public void write(int b) {\n-\n-        int newcount = count + 1;\n-        if (newcount > buffer.length) {\n-            buffer = Bytes.copyOf(buffer, Math.max(buffer.length << 1, newcount));\n-        }\n-        buffer[count] = (byte) b;\n-        count = newcount;\n-    }\n-\n-    @Override\n-    public void write(byte[] b, int off, int len) {\n-\n-        if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) {\n-            throw new IndexOutOfBoundsException();\n-        }\n-        if (len == 0) {\n-            return;\n-        }\n-        int newcount = count + len;\n-        if (newcount > buffer.length) {\n-            buffer = Bytes.copyOf(buffer, Math.max(buffer.length << 1, newcount));\n-        }\n-        System.arraycopy(b, off, buffer, count, len);\n-        count = newcount;\n-    }\n-\n-    public int size() {\n-\n-        return count;\n-    }\n-\n-    public void setWriteIndex(int index) {\n-        count = index;\n-    }\n-\n-    public void reset() {\n-\n-        count = 0;\n-    }\n-\n-    public byte[] toByteArray() {\n-\n-        return Bytes.copyOf(buffer, count);\n-    }\n-\n-    public ByteBuffer toByteBuffer() {\n-\n-        return ByteBuffer.wrap(buffer, 0, count);\n-    }\n-\n-    public void writeTo(OutputStream out) throws IOException {\n-\n-        out.write(buffer, 0, count);\n-    }\n-\n-    @Override\n-    public String toString() {\n-\n-        return new String(buffer, 0, count);\n-    }\n-\n-    public String toString(String charset) throws UnsupportedEncodingException {\n-\n-        return new String(buffer, 0, count, charset);\n-    }\n-\n-    @Override\n-    public void close() throws IOException {\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.rpc.protocol.thrift.io;\r\n+\r\n+import org.apache.dubbo.common.io.Bytes;\r\n+\r\n+import java.io.IOException;\r\n+import java.io.OutputStream;\r\n+import java.io.UnsupportedEncodingException;\r\n+import java.nio.ByteBuffer;\r\n+@Deprecated\r\n+public class RandomAccessByteArrayOutputStream extends OutputStream {\r\n+\r\n+    protected byte[] buffer;\r\n+\r\n+    protected int count;\r\n+\r\n+    public RandomAccessByteArrayOutputStream() {\r\n+\r\n+        this(32);\r\n+    }\r\n+\r\n+    public RandomAccessByteArrayOutputStream(int size) {\r\n+\r\n+        if (size < 0) {\r\n+            throw new IllegalArgumentException(\"Negative initial size: \" + size);\r\n+        }\r\n+        buffer = new byte[size];\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(int b) {\r\n+\r\n+        int newcount = count + 1;\r\n+        if (newcount > buffer.length) {\r\n+            buffer = Bytes.copyOf(buffer, Math.max(buffer.length << 1, newcount));\r\n+        }\r\n+        buffer[count] = (byte) b;\r\n+        count = newcount;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(byte[] b, int off, int len) {\r\n+\r\n+        if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) {\r\n+            throw new IndexOutOfBoundsException();\r\n+        }\r\n+        if (len == 0) {\r\n+            return;\r\n+        }\r\n+        int newcount = count + len;\r\n+        if (newcount > buffer.length) {\r\n+            buffer = Bytes.copyOf(buffer, Math.max(buffer.length << 1, newcount));\r\n+        }\r\n+        System.arraycopy(b, off, buffer, count, len);\r\n+        count = newcount;\r\n+    }\r\n+\r\n+    public int size() {\r\n+\r\n+        return count;\r\n+    }\r\n+\r\n+    public void setWriteIndex(int index) {\r\n+        count = index;\r\n+    }\r\n+\r\n+    public void reset() {\r\n+\r\n+        count = 0;\r\n+    }\r\n+\r\n+    public byte[] toByteArray() {\r\n+\r\n+        return Bytes.copyOf(buffer, count);\r\n+    }\r\n+\r\n+    public ByteBuffer toByteBuffer() {\r\n+\r\n+        return ByteBuffer.wrap(buffer, 0, count);\r\n+    }\r\n+\r\n+    public void writeTo(OutputStream out) throws IOException {\r\n+\r\n+        out.write(buffer, 0, count);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+\r\n+        return new String(buffer, 0, count);\r\n+    }\r\n+\r\n+    public String toString(String charset) throws UnsupportedEncodingException {\r\n+\r\n+        return new String(buffer, 0, count, charset);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void close() throws IOException {\r\n+    }\r\n+\r\n+}\r\n"}]}
