{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,8 +1,8 @@\n-Zip file size: 350177 bytes, number of entries: 108\n+Zip file size: 355533 bytes, number of entries: 108\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n -rw----     2.0 fat     2538 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      170 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@@ -10,101 +10,101 @@\n -rw----     2.0 fat       66 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.rpc.InvokerListener\n -rw----     2.0 fat      170 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol\n -rw----     2.0 fat      185 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.rpc.ProxyFactory\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-api/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-rpc-api/pom.properties\n--rw----     2.0 fat     2480 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-rpc-api/pom.xml\n+-rw----     2.0 fat     2417 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-rpc-api/pom.xml\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/alibaba/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/alibaba/dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/alibaba/dubbo/rpc/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 com/alibaba/dubbo/rpc/service/\n -rw----     2.0 fat      959 bX stor 70-Jan-01 00:00 com/alibaba/dubbo/rpc/service/EchoService.java\n--rw----     2.0 fat     1966 bX stor 70-Jan-01 00:00 com/alibaba/dubbo/rpc/service/GenericException.java\n+-rw----     2.0 fat     2028 bX stor 70-Jan-01 00:00 com/alibaba/dubbo/rpc/service/GenericException.java\n -rw----     2.0 fat     1125 bX stor 70-Jan-01 00:00 com/alibaba/dubbo/rpc/service/GenericService.java\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     7812 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/AppResponse.java\n+-rw----     2.0 fat     8067 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/AppResponse.java\n -rw----     2.0 fat     2608 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/AsyncContext.java\n--rw----     2.0 fat     2600 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/AsyncContextImpl.java\n--rw----     2.0 fat    12324 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/AsyncRpcResult.java\n--rw----     2.0 fat     2408 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/AttachmentsAdapter.java\n--rw----     2.0 fat     2584 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/Constants.java\n+-rw----     2.0 fat     2678 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/AsyncContextImpl.java\n+-rw----     2.0 fat    12661 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/AsyncRpcResult.java\n+-rw----     2.0 fat     2479 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/AttachmentsAdapter.java\n+-rw----     2.0 fat     2681 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/Constants.java\n -rw----     2.0 fat     1343 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/Exporter.java\n -rw----     2.0 fat     1452 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/ExporterListener.java\n -rw----     2.0 fat     2405 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/Filter.java\n--rw----     2.0 fat     3965 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/FutureContext.java\n--rw----     2.0 fat     3745 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/Invocation.java\n--rw----     2.0 fat      887 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/InvokeMode.java\n+-rw----     2.0 fat     4073 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/FutureContext.java\n+-rw----     2.0 fat     3885 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/Invocation.java\n+-rw----     2.0 fat      910 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/InvokeMode.java\n -rw----     2.0 fat     1489 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/Invoker.java\n -rw----     2.0 fat     1434 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/InvokerListener.java\n--rw----     2.0 fat     2000 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/ListenableFilter.java\n+-rw----     2.0 fat     2053 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/ListenableFilter.java\n -rw----     2.0 fat     3568 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/Protocol.java\n--rw----     2.0 fat     1484 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/ProtocolServer.java\n--rw----     2.0 fat     1757 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/ProxyFactory.java\n--rw----     2.0 fat     5441 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/Result.java\n+-rw----     2.0 fat     1531 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/ProtocolServer.java\n+-rw----     2.0 fat     1817 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/ProxyFactory.java\n+-rw----     2.0 fat     5629 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/Result.java\n -rw----     2.0 fat     1438 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/RpcConstants.java\n--rw----     2.0 fat    22275 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/RpcContext.java\n--rw----     2.0 fat     3363 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/RpcException.java\n--rw----     2.0 fat    14986 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/RpcInvocation.java\n+-rw----     2.0 fat    23133 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/RpcContext.java\n+-rw----     2.0 fat     3479 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/RpcException.java\n+-rw----     2.0 fat    15427 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/RpcInvocation.java\n -rw----     2.0 fat     8590 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/RpcStatus.java\n--rw----     2.0 fat     2912 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/TimeoutCountDown.java\n--rw----     2.0 fat     1189 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/ZoneDetector.java\n+-rw----     2.0 fat     3002 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/TimeoutCountDown.java\n+-rw----     2.0 fat     1221 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/ZoneDetector.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/\n--rw----     2.0 fat     7579 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/AccessLogFilter.java\n+-rw----     2.0 fat     7773 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/AccessLogFilter.java\n -rw----     2.0 fat     5667 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/ActiveLimitFilter.java\n -rw----     2.0 fat     1827 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/ClassLoaderFilter.java\n -rw----     2.0 fat     4025 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/CompatibleFilter.java\n--rw----     2.0 fat     3400 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/ConsumerContextFilter.java\n--rw----     2.0 fat     6200 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/ContextFilter.java\n+-rw----     2.0 fat     3472 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/ConsumerContextFilter.java\n+-rw----     2.0 fat     6348 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/ContextFilter.java\n -rw----     2.0 fat     3267 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/DeprecatedFilter.java\n -rw----     2.0 fat     1852 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/EchoFilter.java\n -rw----     2.0 fat     5798 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/ExceptionFilter.java\n -rw----     2.0 fat     3810 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/ExecuteLimitFilter.java\n--rw----     2.0 fat    13134 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/GenericFilter.java\n+-rw----     2.0 fat    13371 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/GenericFilter.java\n -rw----     2.0 fat    11294 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/GenericImplFilter.java\n -rw----     2.0 fat     2875 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/TimeoutFilter.java\n -rw----     2.0 fat     2581 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/TokenFilter.java\n--rw----     2.0 fat     2561 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/TpsLimitFilter.java\n+-rw----     2.0 fat     2620 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/TpsLimitFilter.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/tps/\n--rw----     2.0 fat     2716 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/tps/DefaultTPSLimiter.java\n--rw----     2.0 fat     2580 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/tps/StatItem.java\n+-rw----     2.0 fat     2783 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/tps/DefaultTPSLimiter.java\n+-rw----     2.0 fat     2672 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/tps/StatItem.java\n -rw----     2.0 fat     1656 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/filter/tps/TPSLimiter.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/listener/\n -rw----     2.0 fat     1709 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/listener/DeprecatedInvokerListener.java\n -rw----     2.0 fat     1301 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/listener/ExporterListenerAdapter.java\n -rw----     2.0 fat     1271 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/listener/InvokerListenerAdapter.java\n -rw----     2.0 fat     3226 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/listener/ListenerExporterWrapper.java\n -rw----     2.0 fat     3415 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/listener/ListenerInvokerWrapper.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/\n -rw----     2.0 fat     2294 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/AbstractExporter.java\n--rw----     2.0 fat     8018 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/AbstractInvoker.java\n--rw----     2.0 fat     4350 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/AbstractProtocol.java\n+-rw----     2.0 fat     8226 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/AbstractInvoker.java\n+-rw----     2.0 fat     4466 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/AbstractProtocol.java\n -rw----     2.0 fat     8676 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/AbstractProxyProtocol.java\n--rw----     2.0 fat     3926 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/AsyncToSyncInvoker.java\n--rw----     2.0 fat     4009 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/FilterNode.java\n+-rw----     2.0 fat     4028 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/AsyncToSyncInvoker.java\n+-rw----     2.0 fat     4126 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/FilterNode.java\n -rw----     2.0 fat     1837 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/InvokerWrapper.java\n -rw----     2.0 fat     3408 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/ProtocolFilterWrapper.java\n -rw----     2.0 fat     3352 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/ProtocolListenerWrapper.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/dubbo/\n--rw----     2.0 fat     3502 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/dubbo/FutureAdapter.java\n--rw----     2.0 fat     1033 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/dubbo/package-info.java\n+-rw----     2.0 fat     3601 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/dubbo/FutureAdapter.java\n+-rw----     2.0 fat     1054 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/protocol/dubbo/package-info.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/\n -rw----     2.0 fat     3246 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/AbstractProxyFactory.java\n--rw----     2.0 fat     4848 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/AbstractProxyInvoker.java\n--rw----     2.0 fat     3857 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java\n+-rw----     2.0 fat     4975 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/AbstractProxyInvoker.java\n+-rw----     2.0 fat     3955 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/javassist/\n--rw----     2.0 fat     2236 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java\n+-rw----     2.0 fat     2288 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/jdk/\n -rw----     2.0 fat     2124 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/jdk/JdkProxyFactory.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/wrapper/\n -rw----     2.0 fat     5842 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/proxy/wrapper/StubProxyFactoryWrapper.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/\n--rw----     2.0 fat     7911 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/AccessLogData.java\n+-rw----     2.0 fat     8192 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/AccessLogData.java\n -rw----     2.0 fat    11093 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/MockInvoker.java\n -rw----     2.0 fat     1630 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/MockProtocol.java\n--rw----     2.0 fat    11062 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/RpcUtils.java\n-108 files, 329919 bytes uncompressed, 329919 bytes compressed:  0.0%\n+-rw----     2.0 fat    11335 bX stor 70-Jan-01 00:00 org/apache/dubbo/rpc/support/RpcUtils.java\n+108 files, 335275 bytes uncompressed, 335275 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -398,5682 +398,5682 @@\n #\n 040FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 04100   Length              0005 (5)\n 04102   Flags               01 (1) 'Modification'\n 04103   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 04107 PAYLOAD\n \n-04AB7 DATA DESCRIPTOR       08074B50 (134695760)\n-04ABB CRC                   0FC7AABB (264743611)\n-04ABF Compressed Size       000009B0 (2480)\n-04AC3 Uncompressed Size     000009B0 (2480)\n-\n-04AC7 LOCAL HEADER #17      04034B50 (67324752)\n-04ACB Extract Zip Spec      14 (20) '2.0'\n-04ACC Extract OS            00 (0) 'MS-DOS'\n-04ACD General Purpose Flag  0000 (0)\n-04ACF Compression Method    0000 (0) 'Stored'\n-04AD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04AD5 CRC                   00000000 (0)\n-04AD9 Compressed Size       00000000 (0)\n-04ADD Uncompressed Size     00000000 (0)\n-04AE1 Filename Length       0004 (4)\n-04AE3 Extra Length          0009 (9)\n-04AE5 Filename              'XXXX'\n-#\n-# WARNING: Offset 0x4AE5: Filename 'XXXX'\n-#          Zero length filename\n-#\n-04AE9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04AEB   Length              0005 (5)\n-04AED   Flags               01 (1) 'Modification'\n-04AEE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04AF2 LOCAL HEADER #18      04034B50 (67324752)\n-04AF6 Extract Zip Spec      14 (20) '2.0'\n-04AF7 Extract OS            00 (0) 'MS-DOS'\n-04AF8 General Purpose Flag  0000 (0)\n-04AFA Compression Method    0000 (0) 'Stored'\n-04AFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04B00 CRC                   00000000 (0)\n-04B04 Compressed Size       00000000 (0)\n-04B08 Uncompressed Size     00000000 (0)\n-04B0C Filename Length       000C (12)\n-04B0E Extra Length          0009 (9)\n-04B10 Filename              'XXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4B10: Filename 'XXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04B1C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04B1E   Length              0005 (5)\n-04B20   Flags               01 (1) 'Modification'\n-04B21   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04B25 LOCAL HEADER #19      04034B50 (67324752)\n-04B29 Extract Zip Spec      14 (20) '2.0'\n-04B2A Extract OS            00 (0) 'MS-DOS'\n-04B2B General Purpose Flag  0000 (0)\n-04B2D Compression Method    0000 (0) 'Stored'\n-04B2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04B33 CRC                   00000000 (0)\n-04B37 Compressed Size       00000000 (0)\n-04B3B Uncompressed Size     00000000 (0)\n-04B3F Filename Length       0012 (18)\n-04B41 Extra Length          0009 (9)\n-04B43 Filename              'XXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4B43: Filename 'XXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04B55 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04B57   Length              0005 (5)\n-04B59   Flags               01 (1) 'Modification'\n-04B5A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04B5E LOCAL HEADER #20      04034B50 (67324752)\n-04B62 Extract Zip Spec      14 (20) '2.0'\n-04B63 Extract OS            00 (0) 'MS-DOS'\n-04B64 General Purpose Flag  0000 (0)\n-04B66 Compression Method    0000 (0) 'Stored'\n-04B68 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04B6C CRC                   00000000 (0)\n-04B70 Compressed Size       00000000 (0)\n-04B74 Uncompressed Size     00000000 (0)\n-04B78 Filename Length       0016 (22)\n-04B7A Extra Length          0009 (9)\n-04B7C Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4B7C: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04B92 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04B94   Length              0005 (5)\n-04B96   Flags               01 (1) 'Modification'\n-04B97   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04B9B LOCAL HEADER #21      04034B50 (67324752)\n-04B9F Extract Zip Spec      14 (20) '2.0'\n-04BA0 Extract OS            00 (0) 'MS-DOS'\n-04BA1 General Purpose Flag  0000 (0)\n-04BA3 Compression Method    0000 (0) 'Stored'\n-04BA5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04BA9 CRC                   00000000 (0)\n-04BAD Compressed Size       00000000 (0)\n-04BB1 Uncompressed Size     00000000 (0)\n-04BB5 Filename Length       001E (30)\n-04BB7 Extra Length          0009 (9)\n-04BB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4BB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04BD7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04BD9   Length              0005 (5)\n-04BDB   Flags               01 (1) 'Modification'\n-04BDC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-04BE0 LOCAL HEADER #22      04034B50 (67324752)\n-04BE4 Extract Zip Spec      14 (20) '2.0'\n-04BE5 Extract OS            00 (0) 'MS-DOS'\n-04BE6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-04BE8 Compression Method    0000 (0) 'Stored'\n-04BEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-04BEE CRC                   00000000 (0)\n-04BF2 Compressed Size       00000000 (0)\n-04BF6 Uncompressed Size     00000000 (0)\n-04BFA Filename Length       002E (46)\n-04BFC Extra Length          0009 (9)\n-04BFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4BFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-04C2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-04C2E   Length              0005 (5)\n-04C30   Flags               01 (1) 'Modification'\n-04C31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-04C35 PAYLOAD\n-\n-04FF4 DATA DESCRIPTOR       08074B50 (134695760)\n-04FF8 CRC                   00900547 (9438535)\n-04FFC Compressed Size       000003BF (959)\n-05000 Uncompressed Size     000003BF (959)\n-\n-05004 LOCAL HEADER #23      04034B50 (67324752)\n-05008 Extract Zip Spec      14 (20) '2.0'\n-05009 Extract OS            00 (0) 'MS-DOS'\n-0500A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0500C Compression Method    0000 (0) 'Stored'\n-0500E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05012 CRC                   00000000 (0)\n-05016 Compressed Size       00000000 (0)\n-0501A Uncompressed Size     00000000 (0)\n-0501E Filename Length       0033 (51)\n-05020 Extra Length          0009 (9)\n-05022 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5022: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05055 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05057   Length              0005 (5)\n-05059   Flags               01 (1) 'Modification'\n-0505A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0505E PAYLOAD\n-\n-0580C DATA DESCRIPTOR       08074B50 (134695760)\n-05810 CRC                   C50B0632 (3305834034)\n-05814 Compressed Size       000007AE (1966)\n-05818 Uncompressed Size     000007AE (1966)\n-\n-0581C LOCAL HEADER #24      04034B50 (67324752)\n-05820 Extract Zip Spec      14 (20) '2.0'\n-05821 Extract OS            00 (0) 'MS-DOS'\n-05822 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-05824 Compression Method    0000 (0) 'Stored'\n-05826 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0582A CRC                   00000000 (0)\n-0582E Compressed Size       00000000 (0)\n-05832 Uncompressed Size     00000000 (0)\n-05836 Filename Length       0031 (49)\n-05838 Extra Length          0009 (9)\n-0583A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x583A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0586B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0586D   Length              0005 (5)\n-0586F   Flags               01 (1) 'Modification'\n-05870   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05874 PAYLOAD\n-\n-05CD9 DATA DESCRIPTOR       08074B50 (134695760)\n-05CDD CRC                   C514DA82 (3306478210)\n-05CE1 Compressed Size       00000465 (1125)\n-05CE5 Uncompressed Size     00000465 (1125)\n-\n-05CE9 LOCAL HEADER #25      04034B50 (67324752)\n-05CED Extract Zip Spec      14 (20) '2.0'\n-05CEE Extract OS            00 (0) 'MS-DOS'\n-05CEF General Purpose Flag  0000 (0)\n-05CF1 Compression Method    0000 (0) 'Stored'\n-05CF3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05CF7 CRC                   00000000 (0)\n-05CFB Compressed Size       00000000 (0)\n-05CFF Uncompressed Size     00000000 (0)\n-05D03 Filename Length       0004 (4)\n-05D05 Extra Length          0009 (9)\n-05D07 Filename              'XXXX'\n-#\n-# WARNING: Offset 0x5D07: Filename 'XXXX'\n-#          Zero length filename\n-#\n-05D0B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05D0D   Length              0005 (5)\n-05D0F   Flags               01 (1) 'Modification'\n-05D10   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05D14 LOCAL HEADER #26      04034B50 (67324752)\n-05D18 Extract Zip Spec      14 (20) '2.0'\n-05D19 Extract OS            00 (0) 'MS-DOS'\n-05D1A General Purpose Flag  0000 (0)\n-05D1C Compression Method    0000 (0) 'Stored'\n-05D1E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05D22 CRC                   00000000 (0)\n-05D26 Compressed Size       00000000 (0)\n-05D2A Uncompressed Size     00000000 (0)\n-05D2E Filename Length       000B (11)\n-05D30 Extra Length          0009 (9)\n-05D32 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5D32: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05D3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05D3F   Length              0005 (5)\n-05D41   Flags               01 (1) 'Modification'\n-05D42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05D46 LOCAL HEADER #27      04034B50 (67324752)\n-05D4A Extract Zip Spec      14 (20) '2.0'\n-05D4B Extract OS            00 (0) 'MS-DOS'\n-05D4C General Purpose Flag  0000 (0)\n-05D4E Compression Method    0000 (0) 'Stored'\n-05D50 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05D54 CRC                   00000000 (0)\n-05D58 Compressed Size       00000000 (0)\n-05D5C Uncompressed Size     00000000 (0)\n-05D60 Filename Length       0011 (17)\n-05D62 Extra Length          0009 (9)\n-05D64 Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5D64: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05D75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05D77   Length              0005 (5)\n-05D79   Flags               01 (1) 'Modification'\n-05D7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05D7E LOCAL HEADER #28      04034B50 (67324752)\n-05D82 Extract Zip Spec      14 (20) '2.0'\n-05D83 Extract OS            00 (0) 'MS-DOS'\n-05D84 General Purpose Flag  0000 (0)\n-05D86 Compression Method    0000 (0) 'Stored'\n-05D88 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05D8C CRC                   00000000 (0)\n-05D90 Compressed Size       00000000 (0)\n-05D94 Uncompressed Size     00000000 (0)\n-05D98 Filename Length       0015 (21)\n-05D9A Extra Length          0009 (9)\n-05D9C Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5D9C: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05DB1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05DB3   Length              0005 (5)\n-05DB5   Flags               01 (1) 'Modification'\n-05DB6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05DBA LOCAL HEADER #29      04034B50 (67324752)\n-05DBE Extract Zip Spec      14 (20) '2.0'\n-05DBF Extract OS            00 (0) 'MS-DOS'\n-05DC0 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-05DC2 Compression Method    0000 (0) 'Stored'\n-05DC4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05DC8 CRC                   00000000 (0)\n-05DCC Compressed Size       00000000 (0)\n-05DD0 Uncompressed Size     00000000 (0)\n-05DD4 Filename Length       0025 (37)\n-05DD6 Extra Length          0009 (9)\n-05DD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5DD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05DFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05DFF   Length              0005 (5)\n-05E01   Flags               01 (1) 'Modification'\n-05E02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-05E06 PAYLOAD\n-\n-07C8A DATA DESCRIPTOR       08074B50 (134695760)\n-07C8E CRC                   3836550F (943084815)\n-07C92 Compressed Size       00001E84 (7812)\n-07C96 Uncompressed Size     00001E84 (7812)\n-\n-07C9A LOCAL HEADER #30      04034B50 (67324752)\n-07C9E Extract Zip Spec      14 (20) '2.0'\n-07C9F Extract OS            00 (0) 'MS-DOS'\n-07CA0 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-07CA2 Compression Method    0000 (0) 'Stored'\n-07CA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07CA8 CRC                   00000000 (0)\n-07CAC Compressed Size       00000000 (0)\n-07CB0 Uncompressed Size     00000000 (0)\n-07CB4 Filename Length       0026 (38)\n-07CB6 Extra Length          0009 (9)\n-07CB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7CB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-07CDE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-07CE0   Length              0005 (5)\n-07CE2   Flags               01 (1) 'Modification'\n-07CE3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-07CE7 PAYLOAD\n-\n-08717 DATA DESCRIPTOR       08074B50 (134695760)\n-0871B CRC                   16C36050 (381902928)\n-0871F Compressed Size       00000A30 (2608)\n-08723 Uncompressed Size     00000A30 (2608)\n-\n-08727 LOCAL HEADER #31      04034B50 (67324752)\n-0872B Extract Zip Spec      14 (20) '2.0'\n-0872C Extract OS            00 (0) 'MS-DOS'\n-0872D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0872F Compression Method    0000 (0) 'Stored'\n-08731 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08735 CRC                   00000000 (0)\n-08739 Compressed Size       00000000 (0)\n-0873D Uncompressed Size     00000000 (0)\n-08741 Filename Length       002A (42)\n-08743 Extra Length          0009 (9)\n-08745 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8745: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0876F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08771   Length              0005 (5)\n-08773   Flags               01 (1) 'Modification'\n-08774   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08778 PAYLOAD\n-\n-091A0 DATA DESCRIPTOR       08074B50 (134695760)\n-091A4 CRC                   5C1C5F40 (1545363264)\n-091A8 Compressed Size       00000A28 (2600)\n-091AC Uncompressed Size     00000A28 (2600)\n-\n-091B0 LOCAL HEADER #32      04034B50 (67324752)\n-091B4 Extract Zip Spec      14 (20) '2.0'\n-091B5 Extract OS            00 (0) 'MS-DOS'\n-091B6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-091B8 Compression Method    0000 (0) 'Stored'\n-091BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-091BE CRC                   00000000 (0)\n-091C2 Compressed Size       00000000 (0)\n-091C6 Uncompressed Size     00000000 (0)\n-091CA Filename Length       0028 (40)\n-091CC Extra Length          0009 (9)\n-091CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x91CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-091F6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-091F8   Length              0005 (5)\n-091FA   Flags               01 (1) 'Modification'\n-091FB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-091FF PAYLOAD\n-\n-0C223 DATA DESCRIPTOR       08074B50 (134695760)\n-0C227 CRC                   93FCD4E8 (2482820328)\n-0C22B Compressed Size       00003024 (12324)\n-0C22F Uncompressed Size     00003024 (12324)\n-\n-0C233 LOCAL HEADER #33      04034B50 (67324752)\n-0C237 Extract Zip Spec      14 (20) '2.0'\n-0C238 Extract OS            00 (0) 'MS-DOS'\n-0C239 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0C23B Compression Method    0000 (0) 'Stored'\n-0C23D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C241 CRC                   00000000 (0)\n-0C245 Compressed Size       00000000 (0)\n-0C249 Uncompressed Size     00000000 (0)\n-0C24D Filename Length       002C (44)\n-0C24F Extra Length          0009 (9)\n-0C251 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC251: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C27D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C27F   Length              0005 (5)\n-0C281   Flags               01 (1) 'Modification'\n-0C282   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C286 PAYLOAD\n-\n-0CBEE DATA DESCRIPTOR       08074B50 (134695760)\n-0CBF2 CRC                   735FA0B6 (1935646902)\n-0CBF6 Compressed Size       00000968 (2408)\n-0CBFA Uncompressed Size     00000968 (2408)\n-\n-0CBFE LOCAL HEADER #34      04034B50 (67324752)\n-0CC02 Extract Zip Spec      14 (20) '2.0'\n-0CC03 Extract OS            00 (0) 'MS-DOS'\n-0CC04 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0CC06 Compression Method    0000 (0) 'Stored'\n-0CC08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CC0C CRC                   00000000 (0)\n-0CC10 Compressed Size       00000000 (0)\n-0CC14 Uncompressed Size     00000000 (0)\n-0CC18 Filename Length       0023 (35)\n-0CC1A Extra Length          0009 (9)\n-0CC1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCC1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CC3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CC41   Length              0005 (5)\n-0CC43   Flags               01 (1) 'Modification'\n-0CC44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CC48 PAYLOAD\n-\n-0D660 DATA DESCRIPTOR       08074B50 (134695760)\n-0D664 CRC                   2AE2442E (719471662)\n-0D668 Compressed Size       00000A18 (2584)\n-0D66C Uncompressed Size     00000A18 (2584)\n-\n-0D670 LOCAL HEADER #35      04034B50 (67324752)\n-0D674 Extract Zip Spec      14 (20) '2.0'\n-0D675 Extract OS            00 (0) 'MS-DOS'\n-0D676 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0D678 Compression Method    0000 (0) 'Stored'\n-0D67A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D67E CRC                   00000000 (0)\n-0D682 Compressed Size       00000000 (0)\n-0D686 Uncompressed Size     00000000 (0)\n-0D68A Filename Length       0022 (34)\n-0D68C Extra Length          0009 (9)\n-0D68E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD68E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D6B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D6B2   Length              0005 (5)\n-0D6B4   Flags               01 (1) 'Modification'\n-0D6B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D6B9 PAYLOAD\n-\n-0DBF8 DATA DESCRIPTOR       08074B50 (134695760)\n-0DBFC CRC                   525AF459 (1381692505)\n-0DC00 Compressed Size       0000053F (1343)\n-0DC04 Uncompressed Size     0000053F (1343)\n-\n-0DC08 LOCAL HEADER #36      04034B50 (67324752)\n-0DC0C Extract Zip Spec      14 (20) '2.0'\n-0DC0D Extract OS            00 (0) 'MS-DOS'\n-0DC0E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0DC10 Compression Method    0000 (0) 'Stored'\n-0DC12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DC16 CRC                   00000000 (0)\n-0DC1A Compressed Size       00000000 (0)\n-0DC1E Uncompressed Size     00000000 (0)\n-0DC22 Filename Length       002A (42)\n-0DC24 Extra Length          0009 (9)\n-0DC26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDC26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DC50 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DC52   Length              0005 (5)\n-0DC54   Flags               01 (1) 'Modification'\n-0DC55   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DC59 PAYLOAD\n-\n-0E205 DATA DESCRIPTOR       08074B50 (134695760)\n-0E209 CRC                   FC32E707 (4231194375)\n-0E20D Compressed Size       000005AC (1452)\n-0E211 Uncompressed Size     000005AC (1452)\n-\n-0E215 LOCAL HEADER #37      04034B50 (67324752)\n-0E219 Extract Zip Spec      14 (20) '2.0'\n-0E21A Extract OS            00 (0) 'MS-DOS'\n-0E21B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0E21D Compression Method    0000 (0) 'Stored'\n-0E21F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0E223 CRC                   00000000 (0)\n-0E227 Compressed Size       00000000 (0)\n-0E22B Uncompressed Size     00000000 (0)\n-0E22F Filename Length       0020 (32)\n-0E231 Extra Length          0009 (9)\n-0E233 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xE233: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0E253 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0E255   Length              0005 (5)\n-0E257   Flags               01 (1) 'Modification'\n-0E258   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0E25C PAYLOAD\n-\n-0EBC1 DATA DESCRIPTOR       08074B50 (134695760)\n-0EBC5 CRC                   2EDA0DE9 (786042345)\n-0EBC9 Compressed Size       00000965 (2405)\n-0EBCD Uncompressed Size     00000965 (2405)\n-\n-0EBD1 LOCAL HEADER #38      04034B50 (67324752)\n-0EBD5 Extract Zip Spec      14 (20) '2.0'\n-0EBD6 Extract OS            00 (0) 'MS-DOS'\n-0EBD7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0EBD9 Compression Method    0000 (0) 'Stored'\n-0EBDB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0EBDF CRC                   00000000 (0)\n-0EBE3 Compressed Size       00000000 (0)\n-0EBE7 Uncompressed Size     00000000 (0)\n-0EBEB Filename Length       0027 (39)\n-0EBED Extra Length          0009 (9)\n-0EBEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xEBEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EC16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EC18   Length              0005 (5)\n-0EC1A   Flags               01 (1) 'Modification'\n-0EC1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EC1F PAYLOAD\n-\n-0FB9C DATA DESCRIPTOR       08074B50 (134695760)\n-0FBA0 CRC                   16263A19 (371603993)\n-0FBA4 Compressed Size       00000F7D (3965)\n-0FBA8 Uncompressed Size     00000F7D (3965)\n-\n-0FBAC LOCAL HEADER #39      04034B50 (67324752)\n-0FBB0 Extract Zip Spec      14 (20) '2.0'\n-0FBB1 Extract OS            00 (0) 'MS-DOS'\n-0FBB2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0FBB4 Compression Method    0000 (0) 'Stored'\n-0FBB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0FBBA CRC                   00000000 (0)\n-0FBBE Compressed Size       00000000 (0)\n-0FBC2 Uncompressed Size     00000000 (0)\n-0FBC6 Filename Length       0024 (36)\n-0FBC8 Extra Length          0009 (9)\n-0FBCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xFBCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0FBEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0FBF0   Length              0005 (5)\n-0FBF2   Flags               01 (1) 'Modification'\n-0FBF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0FBF7 PAYLOAD\n-\n-10A98 DATA DESCRIPTOR       08074B50 (134695760)\n-10A9C CRC                   4A170C4C (1243024460)\n-10AA0 Compressed Size       00000EA1 (3745)\n-10AA4 Uncompressed Size     00000EA1 (3745)\n-\n-10AA8 LOCAL HEADER #40      04034B50 (67324752)\n-10AAC Extract Zip Spec      14 (20) '2.0'\n-10AAD Extract OS            00 (0) 'MS-DOS'\n-10AAE General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-10AB0 Compression Method    0000 (0) 'Stored'\n-10AB2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10AB6 CRC                   00000000 (0)\n-10ABA Compressed Size       00000000 (0)\n-10ABE Uncompressed Size     00000000 (0)\n-10AC2 Filename Length       0024 (36)\n-10AC4 Extra Length          0009 (9)\n-10AC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10AC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10AEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10AEC   Length              0005 (5)\n-10AEE   Flags               01 (1) 'Modification'\n-10AEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10AF3 PAYLOAD\n-\n-10E6A DATA DESCRIPTOR       08074B50 (134695760)\n-10E6E CRC                   D1AB43CA (3517662154)\n-10E72 Compressed Size       00000377 (887)\n-10E76 Uncompressed Size     00000377 (887)\n-\n-10E7A LOCAL HEADER #41      04034B50 (67324752)\n-10E7E Extract Zip Spec      14 (20) '2.0'\n-10E7F Extract OS            00 (0) 'MS-DOS'\n-10E80 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-10E82 Compression Method    0000 (0) 'Stored'\n-10E84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-10E88 CRC                   00000000 (0)\n-10E8C Compressed Size       00000000 (0)\n-10E90 Uncompressed Size     00000000 (0)\n-10E94 Filename Length       0021 (33)\n-10E96 Extra Length          0009 (9)\n-10E98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x10E98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-10EB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-10EBB   Length              0005 (5)\n-10EBD   Flags               01 (1) 'Modification'\n-10EBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-10EC2 PAYLOAD\n-\n-11493 DATA DESCRIPTOR       08074B50 (134695760)\n-11497 CRC                   19B4DE27 (431283751)\n-1149B Compressed Size       000005D1 (1489)\n-1149F Uncompressed Size     000005D1 (1489)\n-\n-114A3 LOCAL HEADER #42      04034B50 (67324752)\n-114A7 Extract Zip Spec      14 (20) '2.0'\n-114A8 Extract OS            00 (0) 'MS-DOS'\n-114A9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-114AB Compression Method    0000 (0) 'Stored'\n-114AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-114B1 CRC                   00000000 (0)\n-114B5 Compressed Size       00000000 (0)\n-114B9 Uncompressed Size     00000000 (0)\n-114BD Filename Length       0029 (41)\n-114BF Extra Length          0009 (9)\n-114C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x114C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-114EA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-114EC   Length              0005 (5)\n-114EE   Flags               01 (1) 'Modification'\n-114EF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-114F3 PAYLOAD\n-\n-11A8D DATA DESCRIPTOR       08074B50 (134695760)\n-11A91 CRC                   D82F1E47 (3626966599)\n-11A95 Compressed Size       0000059A (1434)\n-11A99 Uncompressed Size     0000059A (1434)\n-\n-11A9D LOCAL HEADER #43      04034B50 (67324752)\n-11AA1 Extract Zip Spec      14 (20) '2.0'\n-11AA2 Extract OS            00 (0) 'MS-DOS'\n-11AA3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-11AA5 Compression Method    0000 (0) 'Stored'\n-11AA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-11AAB CRC                   00000000 (0)\n-11AAF Compressed Size       00000000 (0)\n-11AB3 Uncompressed Size     00000000 (0)\n-11AB7 Filename Length       002A (42)\n-11AB9 Extra Length          0009 (9)\n-11ABB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x11ABB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-11AE5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-11AE7   Length              0005 (5)\n-11AE9   Flags               01 (1) 'Modification'\n-11AEA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-11AEE PAYLOAD\n-\n-122BE DATA DESCRIPTOR       08074B50 (134695760)\n-122C2 CRC                   2BFDB64A (738047562)\n-122C6 Compressed Size       000007D0 (2000)\n-122CA Uncompressed Size     000007D0 (2000)\n-\n-122CE LOCAL HEADER #44      04034B50 (67324752)\n-122D2 Extract Zip Spec      14 (20) '2.0'\n-122D3 Extract OS            00 (0) 'MS-DOS'\n-122D4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-122D6 Compression Method    0000 (0) 'Stored'\n-122D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-122DC CRC                   00000000 (0)\n-122E0 Compressed Size       00000000 (0)\n-122E4 Uncompressed Size     00000000 (0)\n-122E8 Filename Length       0022 (34)\n-122EA Extra Length          0009 (9)\n-122EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x122EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1230E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12310   Length              0005 (5)\n-12312   Flags               01 (1) 'Modification'\n-12313   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12317 PAYLOAD\n-\n-13107 DATA DESCRIPTOR       08074B50 (134695760)\n-1310B CRC                   CCB43BAA (3434363818)\n-1310F Compressed Size       00000DF0 (3568)\n-13113 Uncompressed Size     00000DF0 (3568)\n-\n-13117 LOCAL HEADER #45      04034B50 (67324752)\n-1311B Extract Zip Spec      14 (20) '2.0'\n-1311C Extract OS            00 (0) 'MS-DOS'\n-1311D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1311F Compression Method    0000 (0) 'Stored'\n-13121 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13125 CRC                   00000000 (0)\n-13129 Compressed Size       00000000 (0)\n-1312D Uncompressed Size     00000000 (0)\n-13131 Filename Length       0028 (40)\n-13133 Extra Length          0009 (9)\n-13135 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13135: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1315D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1315F   Length              0005 (5)\n-13161   Flags               01 (1) 'Modification'\n-13162   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-13166 PAYLOAD\n-\n-13732 DATA DESCRIPTOR       08074B50 (134695760)\n-13736 CRC                   0D33E2B2 (221504178)\n-1373A Compressed Size       000005CC (1484)\n-1373E Uncompressed Size     000005CC (1484)\n-\n-13742 LOCAL HEADER #46      04034B50 (67324752)\n-13746 Extract Zip Spec      14 (20) '2.0'\n-13747 Extract OS            00 (0) 'MS-DOS'\n-13748 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1374A Compression Method    0000 (0) 'Stored'\n-1374C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13750 CRC                   00000000 (0)\n-13754 Compressed Size       00000000 (0)\n-13758 Uncompressed Size     00000000 (0)\n-1375C Filename Length       0026 (38)\n-1375E Extra Length          0009 (9)\n-13760 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13760: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13786 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13788   Length              0005 (5)\n-1378A   Flags               01 (1) 'Modification'\n-1378B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1378F PAYLOAD\n-\n-13E6C DATA DESCRIPTOR       08074B50 (134695760)\n-13E70 CRC                   319BF765 (832304997)\n-13E74 Compressed Size       000006DD (1757)\n-13E78 Uncompressed Size     000006DD (1757)\n-\n-13E7C LOCAL HEADER #47      04034B50 (67324752)\n-13E80 Extract Zip Spec      14 (20) '2.0'\n-13E81 Extract OS            00 (0) 'MS-DOS'\n-13E82 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-13E84 Compression Method    0000 (0) 'Stored'\n-13E86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-13E8A CRC                   00000000 (0)\n-13E8E Compressed Size       00000000 (0)\n-13E92 Uncompressed Size     00000000 (0)\n-13E96 Filename Length       0020 (32)\n-13E98 Extra Length          0009 (9)\n-13E9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13E9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-13EBA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-13EBC   Length              0005 (5)\n-13EBE   Flags               01 (1) 'Modification'\n-13EBF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-13EC3 PAYLOAD\n-\n-15404 DATA DESCRIPTOR       08074B50 (134695760)\n-15408 CRC                   7799251E (2006525214)\n-1540C Compressed Size       00001541 (5441)\n-15410 Uncompressed Size     00001541 (5441)\n-\n-15414 LOCAL HEADER #48      04034B50 (67324752)\n-15418 Extract Zip Spec      14 (20) '2.0'\n-15419 Extract OS            00 (0) 'MS-DOS'\n-1541A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1541C Compression Method    0000 (0) 'Stored'\n-1541E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15422 CRC                   00000000 (0)\n-15426 Compressed Size       00000000 (0)\n-1542A Uncompressed Size     00000000 (0)\n-1542E Filename Length       0026 (38)\n-15430 Extra Length          0009 (9)\n-15432 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15432: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15458 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1545A   Length              0005 (5)\n-1545C   Flags               01 (1) 'Modification'\n-1545D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-15461 PAYLOAD\n-\n-159FF DATA DESCRIPTOR       08074B50 (134695760)\n-15A03 CRC                   3BFD1345 (1006441285)\n-15A07 Compressed Size       0000059E (1438)\n-15A0B Uncompressed Size     0000059E (1438)\n-\n-15A0F LOCAL HEADER #49      04034B50 (67324752)\n-15A13 Extract Zip Spec      14 (20) '2.0'\n-15A14 Extract OS            00 (0) 'MS-DOS'\n-15A15 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-15A17 Compression Method    0000 (0) 'Stored'\n-15A19 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-15A1D CRC                   00000000 (0)\n-15A21 Compressed Size       00000000 (0)\n-15A25 Uncompressed Size     00000000 (0)\n-15A29 Filename Length       0024 (36)\n-15A2B Extra Length          0009 (9)\n-15A2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x15A2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15A51 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15A53   Length              0005 (5)\n-15A55   Flags               01 (1) 'Modification'\n-15A56   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-15A5A PAYLOAD\n-\n-1B15D DATA DESCRIPTOR       08074B50 (134695760)\n-1B161 CRC                   8B2B5BC6 (2334874566)\n-1B165 Compressed Size       00005703 (22275)\n-1B169 Uncompressed Size     00005703 (22275)\n-\n-1B16D LOCAL HEADER #50      04034B50 (67324752)\n-1B171 Extract Zip Spec      14 (20) '2.0'\n-1B172 Extract OS            00 (0) 'MS-DOS'\n-1B173 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1B175 Compression Method    0000 (0) 'Stored'\n-1B177 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1B17B CRC                   00000000 (0)\n-1B17F Compressed Size       00000000 (0)\n-1B183 Uncompressed Size     00000000 (0)\n-1B187 Filename Length       0026 (38)\n-1B189 Extra Length          0009 (9)\n-1B18B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B18B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1B1B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1B1B3   Length              0005 (5)\n-1B1B5   Flags               01 (1) 'Modification'\n-1B1B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1B1BA PAYLOAD\n-\n-1BEDD DATA DESCRIPTOR       08074B50 (134695760)\n-1BEE1 CRC                   D96AD9D5 (3647658453)\n-1BEE5 Compressed Size       00000D23 (3363)\n-1BEE9 Uncompressed Size     00000D23 (3363)\n-\n-1BEED LOCAL HEADER #51      04034B50 (67324752)\n-1BEF1 Extract Zip Spec      14 (20) '2.0'\n-1BEF2 Extract OS            00 (0) 'MS-DOS'\n-1BEF3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1BEF5 Compression Method    0000 (0) 'Stored'\n-1BEF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1BEFB CRC                   00000000 (0)\n-1BEFF Compressed Size       00000000 (0)\n-1BF03 Uncompressed Size     00000000 (0)\n-1BF07 Filename Length       0027 (39)\n-1BF09 Extra Length          0009 (9)\n-1BF0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1BF0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1BF32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1BF34   Length              0005 (5)\n-1BF36   Flags               01 (1) 'Modification'\n-1BF37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1BF3B PAYLOAD\n-\n-1F9C5 DATA DESCRIPTOR       08074B50 (134695760)\n-1F9C9 CRC                   7D1A8DDF (2098892255)\n-1F9CD Compressed Size       00003A8A (14986)\n-1F9D1 Uncompressed Size     00003A8A (14986)\n-\n-1F9D5 LOCAL HEADER #52      04034B50 (67324752)\n-1F9D9 Extract Zip Spec      14 (20) '2.0'\n-1F9DA Extract OS            00 (0) 'MS-DOS'\n-1F9DB General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1F9DD Compression Method    0000 (0) 'Stored'\n-1F9DF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1F9E3 CRC                   00000000 (0)\n-1F9E7 Compressed Size       00000000 (0)\n-1F9EB Uncompressed Size     00000000 (0)\n-1F9EF Filename Length       0023 (35)\n-1F9F1 Extra Length          0009 (9)\n-1F9F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1F9F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1FA16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1FA18   Length              0005 (5)\n-1FA1A   Flags               01 (1) 'Modification'\n-1FA1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1FA1F PAYLOAD\n-\n-21BAD DATA DESCRIPTOR       08074B50 (134695760)\n-21BB1 CRC                   B577D739 (3044529977)\n-21BB5 Compressed Size       0000218E (8590)\n-21BB9 Uncompressed Size     0000218E (8590)\n-\n-21BBD LOCAL HEADER #53      04034B50 (67324752)\n-21BC1 Extract Zip Spec      14 (20) '2.0'\n-21BC2 Extract OS            00 (0) 'MS-DOS'\n-21BC3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-21BC5 Compression Method    0000 (0) 'Stored'\n-21BC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-21BCB CRC                   00000000 (0)\n-21BCF Compressed Size       00000000 (0)\n-21BD3 Uncompressed Size     00000000 (0)\n-21BD7 Filename Length       002A (42)\n-21BD9 Extra Length          0009 (9)\n-21BDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x21BDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-21C05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-21C07   Length              0005 (5)\n-21C09   Flags               01 (1) 'Modification'\n-21C0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-21C0E PAYLOAD\n-\n-2276E DATA DESCRIPTOR       08074B50 (134695760)\n-22772 CRC                   1894D2EA (412406506)\n-22776 Compressed Size       00000B60 (2912)\n-2277A Uncompressed Size     00000B60 (2912)\n-\n-2277E LOCAL HEADER #54      04034B50 (67324752)\n-22782 Extract Zip Spec      14 (20) '2.0'\n-22783 Extract OS            00 (0) 'MS-DOS'\n-22784 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-22786 Compression Method    0000 (0) 'Stored'\n-22788 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2278C CRC                   00000000 (0)\n-22790 Compressed Size       00000000 (0)\n-22794 Uncompressed Size     00000000 (0)\n-22798 Filename Length       0026 (38)\n-2279A Extra Length          0009 (9)\n-2279C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2279C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-227C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-227C4   Length              0005 (5)\n-227C6   Flags               01 (1) 'Modification'\n-227C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-227CB PAYLOAD\n-\n-22C70 DATA DESCRIPTOR       08074B50 (134695760)\n-22C74 CRC                   4977D9A5 (1232591269)\n-22C78 Compressed Size       000004A5 (1189)\n-22C7C Uncompressed Size     000004A5 (1189)\n-\n-22C80 LOCAL HEADER #55      04034B50 (67324752)\n-22C84 Extract Zip Spec      14 (20) '2.0'\n-22C85 Extract OS            00 (0) 'MS-DOS'\n-22C86 General Purpose Flag  0000 (0)\n-22C88 Compression Method    0000 (0) 'Stored'\n-22C8A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-22C8E CRC                   00000000 (0)\n-22C92 Compressed Size       00000000 (0)\n-22C96 Uncompressed Size     00000000 (0)\n-22C9A Filename Length       001C (28)\n-22C9C Extra Length          0009 (9)\n-22C9E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x22C9E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-22CBA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-22CBC   Length              0005 (5)\n-22CBE   Flags               01 (1) 'Modification'\n-22CBF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-22CC3 LOCAL HEADER #56      04034B50 (67324752)\n-22CC7 Extract Zip Spec      14 (20) '2.0'\n-22CC8 Extract OS            00 (0) 'MS-DOS'\n-22CC9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-22CCB Compression Method    0000 (0) 'Stored'\n-22CCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-22CD1 CRC                   00000000 (0)\n-22CD5 Compressed Size       00000000 (0)\n-22CD9 Uncompressed Size     00000000 (0)\n-22CDD Filename Length       0030 (48)\n-22CDF Extra Length          0009 (9)\n-22CE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x22CE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-22D11 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-22D13   Length              0005 (5)\n-22D15   Flags               01 (1) 'Modification'\n-22D16   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-22D1A PAYLOAD\n-\n-24AB5 DATA DESCRIPTOR       08074B50 (134695760)\n-24AB9 CRC                   300456E0 (805590752)\n-24ABD Compressed Size       00001D9B (7579)\n-24AC1 Uncompressed Size     00001D9B (7579)\n-\n-24AC5 LOCAL HEADER #57      04034B50 (67324752)\n-24AC9 Extract Zip Spec      14 (20) '2.0'\n-24ACA Extract OS            00 (0) 'MS-DOS'\n-24ACB General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-24ACD Compression Method    0000 (0) 'Stored'\n-24ACF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-24AD3 CRC                   00000000 (0)\n-24AD7 Compressed Size       00000000 (0)\n-24ADB Uncompressed Size     00000000 (0)\n-24ADF Filename Length       0032 (50)\n-24AE1 Extra Length          0009 (9)\n-24AE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x24AE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-24B15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-24B17   Length              0005 (5)\n-24B19   Flags               01 (1) 'Modification'\n-24B1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-24B1E PAYLOAD\n-\n-26141 DATA DESCRIPTOR       08074B50 (134695760)\n-26145 CRC                   B52DE397 (3039683479)\n-26149 Compressed Size       00001623 (5667)\n-2614D Uncompressed Size     00001623 (5667)\n-\n-26151 LOCAL HEADER #58      04034B50 (67324752)\n-26155 Extract Zip Spec      14 (20) '2.0'\n-26156 Extract OS            00 (0) 'MS-DOS'\n-26157 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-26159 Compression Method    0000 (0) 'Stored'\n-2615B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2615F CRC                   00000000 (0)\n-26163 Compressed Size       00000000 (0)\n-26167 Uncompressed Size     00000000 (0)\n-2616B Filename Length       0032 (50)\n-2616D Extra Length          0009 (9)\n-2616F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2616F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-261A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-261A3   Length              0005 (5)\n-261A5   Flags               01 (1) 'Modification'\n-261A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-261AA PAYLOAD\n-\n-268CD DATA DESCRIPTOR       08074B50 (134695760)\n-268D1 CRC                   851F3F00 (2233417472)\n-268D5 Compressed Size       00000723 (1827)\n-268D9 Uncompressed Size     00000723 (1827)\n-\n-268DD LOCAL HEADER #59      04034B50 (67324752)\n-268E1 Extract Zip Spec      14 (20) '2.0'\n-268E2 Extract OS            00 (0) 'MS-DOS'\n-268E3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-268E5 Compression Method    0000 (0) 'Stored'\n-268E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-268EB CRC                   00000000 (0)\n-268EF Compressed Size       00000000 (0)\n-268F3 Uncompressed Size     00000000 (0)\n-268F7 Filename Length       0031 (49)\n-268F9 Extra Length          0009 (9)\n-268FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x268FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2692C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2692E   Length              0005 (5)\n-26930   Flags               01 (1) 'Modification'\n-26931   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-26935 PAYLOAD\n-\n-278EE DATA DESCRIPTOR       08074B50 (134695760)\n-278F2 CRC                   86FDBE3E (2264776254)\n-278F6 Compressed Size       00000FB9 (4025)\n-278FA Uncompressed Size     00000FB9 (4025)\n-\n-278FE LOCAL HEADER #60      04034B50 (67324752)\n-27902 Extract Zip Spec      14 (20) '2.0'\n-27903 Extract OS            00 (0) 'MS-DOS'\n-27904 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-27906 Compression Method    0000 (0) 'Stored'\n-27908 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2790C CRC                   00000000 (0)\n-27910 Compressed Size       00000000 (0)\n-27914 Uncompressed Size     00000000 (0)\n-27918 Filename Length       0036 (54)\n-2791A Extra Length          0009 (9)\n-2791C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2791C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-27952 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-27954   Length              0005 (5)\n-27956   Flags               01 (1) 'Modification'\n-27957   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2795B PAYLOAD\n-\n-286A3 DATA DESCRIPTOR       08074B50 (134695760)\n-286A7 CRC                   A0F5CB6A (2700462954)\n-286AB Compressed Size       00000D48 (3400)\n-286AF Uncompressed Size     00000D48 (3400)\n-\n-286B3 LOCAL HEADER #61      04034B50 (67324752)\n-286B7 Extract Zip Spec      14 (20) '2.0'\n-286B8 Extract OS            00 (0) 'MS-DOS'\n-286B9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-286BB Compression Method    0000 (0) 'Stored'\n-286BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-286C1 CRC                   00000000 (0)\n-286C5 Compressed Size       00000000 (0)\n-286C9 Uncompressed Size     00000000 (0)\n-286CD Filename Length       002E (46)\n-286CF Extra Length          0009 (9)\n-286D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x286D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-286FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-28701   Length              0005 (5)\n-28703   Flags               01 (1) 'Modification'\n-28704   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-28708 PAYLOAD\n-\n-29F40 DATA DESCRIPTOR       08074B50 (134695760)\n-29F44 CRC                   38AEBD8D (950975885)\n-29F48 Compressed Size       00001838 (6200)\n-29F4C Uncompressed Size     00001838 (6200)\n-\n-29F50 LOCAL HEADER #62      04034B50 (67324752)\n-29F54 Extract Zip Spec      14 (20) '2.0'\n-29F55 Extract OS            00 (0) 'MS-DOS'\n-29F56 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-29F58 Compression Method    0000 (0) 'Stored'\n-29F5A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-29F5E CRC                   00000000 (0)\n-29F62 Compressed Size       00000000 (0)\n-29F66 Uncompressed Size     00000000 (0)\n-29F6A Filename Length       0031 (49)\n-29F6C Extra Length          0009 (9)\n-29F6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x29F6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-29F9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-29FA1   Length              0005 (5)\n-29FA3   Flags               01 (1) 'Modification'\n-29FA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-29FA8 PAYLOAD\n-\n-2AC6B DATA DESCRIPTOR       08074B50 (134695760)\n-2AC6F CRC                   5D6B9E17 (1567333911)\n-2AC73 Compressed Size       00000CC3 (3267)\n-2AC77 Uncompressed Size     00000CC3 (3267)\n-\n-2AC7B LOCAL HEADER #63      04034B50 (67324752)\n-2AC7F Extract Zip Spec      14 (20) '2.0'\n-2AC80 Extract OS            00 (0) 'MS-DOS'\n-2AC81 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2AC83 Compression Method    0000 (0) 'Stored'\n-2AC85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2AC89 CRC                   00000000 (0)\n-2AC8D Compressed Size       00000000 (0)\n-2AC91 Uncompressed Size     00000000 (0)\n-2AC95 Filename Length       002B (43)\n-2AC97 Extra Length          0009 (9)\n-2AC99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2AC99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2ACC4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2ACC6   Length              0005 (5)\n-2ACC8   Flags               01 (1) 'Modification'\n-2ACC9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2ACCD PAYLOAD\n-\n-2B409 DATA DESCRIPTOR       08074B50 (134695760)\n-2B40D CRC                   33E95645 (870929989)\n-2B411 Compressed Size       0000073C (1852)\n-2B415 Uncompressed Size     0000073C (1852)\n-\n-2B419 LOCAL HEADER #64      04034B50 (67324752)\n-2B41D Extract Zip Spec      14 (20) '2.0'\n-2B41E Extract OS            00 (0) 'MS-DOS'\n-2B41F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2B421 Compression Method    0000 (0) 'Stored'\n-2B423 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2B427 CRC                   00000000 (0)\n-2B42B Compressed Size       00000000 (0)\n-2B42F Uncompressed Size     00000000 (0)\n-2B433 Filename Length       0030 (48)\n-2B435 Extra Length          0009 (9)\n-2B437 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2B437: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2B467 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2B469   Length              0005 (5)\n-2B46B   Flags               01 (1) 'Modification'\n-2B46C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2B470 PAYLOAD\n-\n-2CB16 DATA DESCRIPTOR       08074B50 (134695760)\n-2CB1A CRC                   DF14BD96 (3742678422)\n-2CB1E Compressed Size       000016A6 (5798)\n-2CB22 Uncompressed Size     000016A6 (5798)\n-\n-2CB26 LOCAL HEADER #65      04034B50 (67324752)\n-2CB2A Extract Zip Spec      14 (20) '2.0'\n-2CB2B Extract OS            00 (0) 'MS-DOS'\n-2CB2C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2CB2E Compression Method    0000 (0) 'Stored'\n-2CB30 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CB34 CRC                   00000000 (0)\n-2CB38 Compressed Size       00000000 (0)\n-2CB3C Uncompressed Size     00000000 (0)\n-2CB40 Filename Length       0033 (51)\n-2CB42 Extra Length          0009 (9)\n-2CB44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CB44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CB77 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CB79   Length              0005 (5)\n-2CB7B   Flags               01 (1) 'Modification'\n-2CB7C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2CB80 PAYLOAD\n-\n-2DA62 DATA DESCRIPTOR       08074B50 (134695760)\n-2DA66 CRC                   FA17120C (4195815948)\n-2DA6A Compressed Size       00000EE2 (3810)\n-2DA6E Uncompressed Size     00000EE2 (3810)\n-\n-2DA72 LOCAL HEADER #66      04034B50 (67324752)\n-2DA76 Extract Zip Spec      14 (20) '2.0'\n-2DA77 Extract OS            00 (0) 'MS-DOS'\n-2DA78 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DA7A Compression Method    0000 (0) 'Stored'\n-2DA7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DA80 CRC                   00000000 (0)\n-2DA84 Compressed Size       00000000 (0)\n-2DA88 Uncompressed Size     00000000 (0)\n-2DA8C Filename Length       002E (46)\n-2DA8E Extra Length          0009 (9)\n-2DA90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DA90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DABE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DAC0   Length              0005 (5)\n-2DAC2   Flags               01 (1) 'Modification'\n-2DAC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2DAC7 PAYLOAD\n-\n-30E15 DATA DESCRIPTOR       08074B50 (134695760)\n-30E19 CRC                   BCD228F3 (3167889651)\n-30E1D Compressed Size       0000334E (13134)\n-30E21 Uncompressed Size     0000334E (13134)\n-\n-30E25 LOCAL HEADER #67      04034B50 (67324752)\n-30E29 Extract Zip Spec      14 (20) '2.0'\n-30E2A Extract OS            00 (0) 'MS-DOS'\n-30E2B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-30E2D Compression Method    0000 (0) 'Stored'\n-30E2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-30E33 CRC                   00000000 (0)\n-30E37 Compressed Size       00000000 (0)\n-30E3B Uncompressed Size     00000000 (0)\n-30E3F Filename Length       0032 (50)\n-30E41 Extra Length          0009 (9)\n-30E43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x30E43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-30E75 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-30E77   Length              0005 (5)\n-30E79   Flags               01 (1) 'Modification'\n-30E7A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-30E7E PAYLOAD\n-\n-33A9C DATA DESCRIPTOR       08074B50 (134695760)\n-33AA0 CRC                   BDC74FB9 (3183955897)\n-33AA4 Compressed Size       00002C1E (11294)\n-33AA8 Uncompressed Size     00002C1E (11294)\n-\n-33AAC LOCAL HEADER #68      04034B50 (67324752)\n-33AB0 Extract Zip Spec      14 (20) '2.0'\n-33AB1 Extract OS            00 (0) 'MS-DOS'\n-33AB2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-33AB4 Compression Method    0000 (0) 'Stored'\n-33AB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-33ABA CRC                   00000000 (0)\n-33ABE Compressed Size       00000000 (0)\n-33AC2 Uncompressed Size     00000000 (0)\n-33AC6 Filename Length       002E (46)\n-33AC8 Extra Length          0009 (9)\n-33ACA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x33ACA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-33AF8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-33AFA   Length              0005 (5)\n-33AFC   Flags               01 (1) 'Modification'\n-33AFD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-33B01 PAYLOAD\n-\n-3463C DATA DESCRIPTOR       08074B50 (134695760)\n-34640 CRC                   4BE7E92F (1273489711)\n-34644 Compressed Size       00000B3B (2875)\n-34648 Uncompressed Size     00000B3B (2875)\n-\n-3464C LOCAL HEADER #69      04034B50 (67324752)\n-34650 Extract Zip Spec      14 (20) '2.0'\n-34651 Extract OS            00 (0) 'MS-DOS'\n-34652 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-34654 Compression Method    0000 (0) 'Stored'\n-34656 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3465A CRC                   00000000 (0)\n-3465E Compressed Size       00000000 (0)\n-34662 Uncompressed Size     00000000 (0)\n-34666 Filename Length       002C (44)\n-34668 Extra Length          0009 (9)\n-3466A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3466A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-34696 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-34698   Length              0005 (5)\n-3469A   Flags               01 (1) 'Modification'\n-3469B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3469F PAYLOAD\n-\n-350B4 DATA DESCRIPTOR       08074B50 (134695760)\n-350B8 CRC                   EE9BE4CE (4003194062)\n-350BC Compressed Size       00000A15 (2581)\n-350C0 Uncompressed Size     00000A15 (2581)\n-\n-350C4 LOCAL HEADER #70      04034B50 (67324752)\n-350C8 Extract Zip Spec      14 (20) '2.0'\n-350C9 Extract OS            00 (0) 'MS-DOS'\n-350CA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-350CC Compression Method    0000 (0) 'Stored'\n-350CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-350D2 CRC                   00000000 (0)\n-350D6 Compressed Size       00000000 (0)\n-350DA Uncompressed Size     00000000 (0)\n-350DE Filename Length       002F (47)\n-350E0 Extra Length          0009 (9)\n-350E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x350E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-35111 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-35113   Length              0005 (5)\n-35115   Flags               01 (1) 'Modification'\n-35116   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3511A PAYLOAD\n-\n-35B1B DATA DESCRIPTOR       08074B50 (134695760)\n-35B1F CRC                   24C74556 (617039190)\n-35B23 Compressed Size       00000A01 (2561)\n-35B27 Uncompressed Size     00000A01 (2561)\n-\n-35B2B LOCAL HEADER #71      04034B50 (67324752)\n-35B2F Extract Zip Spec      14 (20) '2.0'\n-35B30 Extract OS            00 (0) 'MS-DOS'\n-35B31 General Purpose Flag  0000 (0)\n-35B33 Compression Method    0000 (0) 'Stored'\n-35B35 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-35B39 CRC                   00000000 (0)\n-35B3D Compressed Size       00000000 (0)\n-35B41 Uncompressed Size     00000000 (0)\n-35B45 Filename Length       0020 (32)\n-35B47 Extra Length          0009 (9)\n-35B49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x35B49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-35B69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-35B6B   Length              0005 (5)\n-35B6D   Flags               01 (1) 'Modification'\n-35B6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-35B72 LOCAL HEADER #72      04034B50 (67324752)\n-35B76 Extract Zip Spec      14 (20) '2.0'\n-35B77 Extract OS            00 (0) 'MS-DOS'\n-35B78 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-35B7A Compression Method    0000 (0) 'Stored'\n-35B7C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-35B80 CRC                   00000000 (0)\n-35B84 Compressed Size       00000000 (0)\n-35B88 Uncompressed Size     00000000 (0)\n-35B8C Filename Length       0036 (54)\n-35B8E Extra Length          0009 (9)\n-35B90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x35B90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-35BC6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-35BC8   Length              0005 (5)\n-35BCA   Flags               01 (1) 'Modification'\n-35BCB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-35BCF PAYLOAD\n-\n-3666B DATA DESCRIPTOR       08074B50 (134695760)\n-3666F CRC                   F1C552FF (4056240895)\n-36673 Compressed Size       00000A9C (2716)\n-36677 Uncompressed Size     00000A9C (2716)\n-\n-3667B LOCAL HEADER #73      04034B50 (67324752)\n-3667F Extract Zip Spec      14 (20) '2.0'\n-36680 Extract OS            00 (0) 'MS-DOS'\n-36681 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-36683 Compression Method    0000 (0) 'Stored'\n-36685 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-36689 CRC                   00000000 (0)\n-3668D Compressed Size       00000000 (0)\n-36691 Uncompressed Size     00000000 (0)\n-36695 Filename Length       002D (45)\n-36697 Extra Length          0009 (9)\n-36699 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x36699: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-366C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-366C8   Length              0005 (5)\n-366CA   Flags               01 (1) 'Modification'\n-366CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-366CF PAYLOAD\n-\n-370E3 DATA DESCRIPTOR       08074B50 (134695760)\n-370E7 CRC                   0D540AED (223611629)\n-370EB Compressed Size       00000A14 (2580)\n-370EF Uncompressed Size     00000A14 (2580)\n-\n-370F3 LOCAL HEADER #74      04034B50 (67324752)\n-370F7 Extract Zip Spec      14 (20) '2.0'\n-370F8 Extract OS            00 (0) 'MS-DOS'\n-370F9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-370FB Compression Method    0000 (0) 'Stored'\n-370FD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-37101 CRC                   00000000 (0)\n-37105 Compressed Size       00000000 (0)\n-37109 Uncompressed Size     00000000 (0)\n-3710D Filename Length       002F (47)\n-3710F Extra Length          0009 (9)\n-37111 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37111: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-37140 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-37142   Length              0005 (5)\n-37144   Flags               01 (1) 'Modification'\n-37145   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-37149 PAYLOAD\n-\n-377C1 DATA DESCRIPTOR       08074B50 (134695760)\n-377C5 CRC                   00E586BE (15042238)\n-377C9 Compressed Size       00000678 (1656)\n-377CD Uncompressed Size     00000678 (1656)\n-\n-377D1 LOCAL HEADER #75      04034B50 (67324752)\n-377D5 Extract Zip Spec      14 (20) '2.0'\n-377D6 Extract OS            00 (0) 'MS-DOS'\n-377D7 General Purpose Flag  0000 (0)\n-377D9 Compression Method    0000 (0) 'Stored'\n-377DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-377DF CRC                   00000000 (0)\n-377E3 Compressed Size       00000000 (0)\n-377E7 Uncompressed Size     00000000 (0)\n-377EB Filename Length       001E (30)\n-377ED Extra Length          0009 (9)\n-377EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x377EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3780D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3780F   Length              0005 (5)\n-37811   Flags               01 (1) 'Modification'\n-37812   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-37816 LOCAL HEADER #76      04034B50 (67324752)\n-3781A Extract Zip Spec      14 (20) '2.0'\n-3781B Extract OS            00 (0) 'MS-DOS'\n-3781C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3781E Compression Method    0000 (0) 'Stored'\n-37820 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-37824 CRC                   00000000 (0)\n-37828 Compressed Size       00000000 (0)\n-3782C Uncompressed Size     00000000 (0)\n-37830 Filename Length       003C (60)\n-37832 Extra Length          0009 (9)\n-37834 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37834: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-37870 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-37872   Length              0005 (5)\n-37874   Flags               01 (1) 'Modification'\n-37875   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-37879 PAYLOAD\n-\n-37F26 DATA DESCRIPTOR       08074B50 (134695760)\n-37F2A CRC                   E1C5881F (3787819039)\n-37F2E Compressed Size       000006AD (1709)\n-37F32 Uncompressed Size     000006AD (1709)\n-\n-37F36 LOCAL HEADER #77      04034B50 (67324752)\n-37F3A Extract Zip Spec      14 (20) '2.0'\n-37F3B Extract OS            00 (0) 'MS-DOS'\n-37F3C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-37F3E Compression Method    0000 (0) 'Stored'\n-37F40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-37F44 CRC                   00000000 (0)\n-37F48 Compressed Size       00000000 (0)\n-37F4C Uncompressed Size     00000000 (0)\n-37F50 Filename Length       003A (58)\n-37F52 Extra Length          0009 (9)\n-37F54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x37F54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-37F8E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-37F90   Length              0005 (5)\n-37F92   Flags               01 (1) 'Modification'\n-37F93   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-37F97 PAYLOAD\n-\n-384AC DATA DESCRIPTOR       08074B50 (134695760)\n-384B0 CRC                   FE9FE6BA (4271892154)\n-384B4 Compressed Size       00000515 (1301)\n-384B8 Uncompressed Size     00000515 (1301)\n-\n-384BC LOCAL HEADER #78      04034B50 (67324752)\n-384C0 Extract Zip Spec      14 (20) '2.0'\n-384C1 Extract OS            00 (0) 'MS-DOS'\n-384C2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-384C4 Compression Method    0000 (0) 'Stored'\n-384C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-384CA CRC                   00000000 (0)\n-384CE Compressed Size       00000000 (0)\n-384D2 Uncompressed Size     00000000 (0)\n-384D6 Filename Length       0039 (57)\n-384D8 Extra Length          0009 (9)\n-384DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x384DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-38513 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-38515   Length              0005 (5)\n-38517   Flags               01 (1) 'Modification'\n-38518   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3851C PAYLOAD\n-\n-38A13 DATA DESCRIPTOR       08074B50 (134695760)\n-38A17 CRC                   07F77085 (133656709)\n-38A1B Compressed Size       000004F7 (1271)\n-38A1F Uncompressed Size     000004F7 (1271)\n-\n-38A23 LOCAL HEADER #79      04034B50 (67324752)\n-38A27 Extract Zip Spec      14 (20) '2.0'\n-38A28 Extract OS            00 (0) 'MS-DOS'\n-38A29 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-38A2B Compression Method    0000 (0) 'Stored'\n-38A2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-38A31 CRC                   00000000 (0)\n-38A35 Compressed Size       00000000 (0)\n-38A39 Uncompressed Size     00000000 (0)\n-38A3D Filename Length       003A (58)\n-38A3F Extra Length          0009 (9)\n-38A41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x38A41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-38A7B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-38A7D   Length              0005 (5)\n-38A7F   Flags               01 (1) 'Modification'\n-38A80   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-38A84 PAYLOAD\n-\n-3971E DATA DESCRIPTOR       08074B50 (134695760)\n-39722 CRC                   334FA791 (860858257)\n-39726 Compressed Size       00000C9A (3226)\n-3972A Uncompressed Size     00000C9A (3226)\n-\n-3972E LOCAL HEADER #80      04034B50 (67324752)\n-39732 Extract Zip Spec      14 (20) '2.0'\n-39733 Extract OS            00 (0) 'MS-DOS'\n-39734 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-39736 Compression Method    0000 (0) 'Stored'\n-39738 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3973C CRC                   00000000 (0)\n-39740 Compressed Size       00000000 (0)\n-39744 Uncompressed Size     00000000 (0)\n-39748 Filename Length       0039 (57)\n-3974A Extra Length          0009 (9)\n-3974C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3974C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-39785 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-39787   Length              0005 (5)\n-39789   Flags               01 (1) 'Modification'\n-3978A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3978E PAYLOAD\n-\n-3A4E5 DATA DESCRIPTOR       08074B50 (134695760)\n-3A4E9 CRC                   5C26FEE4 (1546059492)\n-3A4ED Compressed Size       00000D57 (3415)\n-3A4F1 Uncompressed Size     00000D57 (3415)\n-\n-3A4F5 LOCAL HEADER #81      04034B50 (67324752)\n-3A4F9 Extract Zip Spec      14 (20) '2.0'\n-3A4FA Extract OS            00 (0) 'MS-DOS'\n-3A4FB General Purpose Flag  0000 (0)\n-3A4FD Compression Method    0000 (0) 'Stored'\n-3A4FF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3A503 CRC                   00000000 (0)\n-3A507 Compressed Size       00000000 (0)\n-3A50B Uncompressed Size     00000000 (0)\n-3A50F Filename Length       001E (30)\n-3A511 Extra Length          0009 (9)\n-3A513 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3A513: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3A531 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3A533   Length              0005 (5)\n-3A535   Flags               01 (1) 'Modification'\n-3A536   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-3A53A LOCAL HEADER #82      04034B50 (67324752)\n-3A53E Extract Zip Spec      14 (20) '2.0'\n-3A53F Extract OS            00 (0) 'MS-DOS'\n-3A540 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3A542 Compression Method    0000 (0) 'Stored'\n-3A544 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3A548 CRC                   00000000 (0)\n-3A54C Compressed Size       00000000 (0)\n-3A550 Uncompressed Size     00000000 (0)\n-3A554 Filename Length       0033 (51)\n-3A556 Extra Length          0009 (9)\n-3A558 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3A558: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3A58B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3A58D   Length              0005 (5)\n-3A58F   Flags               01 (1) 'Modification'\n-3A590   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3A594 PAYLOAD\n-\n-3AE8A DATA DESCRIPTOR       08074B50 (134695760)\n-3AE8E CRC                   EC8B751D (3968562461)\n-3AE92 Compressed Size       000008F6 (2294)\n-3AE96 Uncompressed Size     000008F6 (2294)\n-\n-3AE9A LOCAL HEADER #83      04034B50 (67324752)\n-3AE9E Extract Zip Spec      14 (20) '2.0'\n-3AE9F Extract OS            00 (0) 'MS-DOS'\n-3AEA0 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3AEA2 Compression Method    0000 (0) 'Stored'\n-3AEA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3AEA8 CRC                   00000000 (0)\n-3AEAC Compressed Size       00000000 (0)\n-3AEB0 Uncompressed Size     00000000 (0)\n-3AEB4 Filename Length       0032 (50)\n-3AEB6 Extra Length          0009 (9)\n-3AEB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3AEB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3AEEA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3AEEC   Length              0005 (5)\n-3AEEE   Flags               01 (1) 'Modification'\n-3AEEF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3AEF3 PAYLOAD\n-\n-3CE45 DATA DESCRIPTOR       08074B50 (134695760)\n-3CE49 CRC                   A5C33F03 (2781036291)\n-3CE4D Compressed Size       00001F52 (8018)\n-3CE51 Uncompressed Size     00001F52 (8018)\n-\n-3CE55 LOCAL HEADER #84      04034B50 (67324752)\n-3CE59 Extract Zip Spec      14 (20) '2.0'\n-3CE5A Extract OS            00 (0) 'MS-DOS'\n-3CE5B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3CE5D Compression Method    0000 (0) 'Stored'\n-3CE5F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3CE63 CRC                   00000000 (0)\n-3CE67 Compressed Size       00000000 (0)\n-3CE6B Uncompressed Size     00000000 (0)\n-3CE6F Filename Length       0033 (51)\n-3CE71 Extra Length          0009 (9)\n-3CE73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3CE73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3CEA6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3CEA8   Length              0005 (5)\n-3CEAA   Flags               01 (1) 'Modification'\n-3CEAB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3CEAF PAYLOAD\n-\n-3DFAD DATA DESCRIPTOR       08074B50 (134695760)\n-3DFB1 CRC                   861CA040 (2250022976)\n-3DFB5 Compressed Size       000010FE (4350)\n-3DFB9 Uncompressed Size     000010FE (4350)\n-\n-3DFBD LOCAL HEADER #85      04034B50 (67324752)\n-3DFC1 Extract Zip Spec      14 (20) '2.0'\n-3DFC2 Extract OS            00 (0) 'MS-DOS'\n-3DFC3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-3DFC5 Compression Method    0000 (0) 'Stored'\n-3DFC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-3DFCB CRC                   00000000 (0)\n-3DFCF Compressed Size       00000000 (0)\n-3DFD3 Uncompressed Size     00000000 (0)\n-3DFD7 Filename Length       0038 (56)\n-3DFD9 Extra Length          0009 (9)\n-3DFDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3DFDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-3E013 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-3E015   Length              0005 (5)\n-3E017   Flags               01 (1) 'Modification'\n-3E018   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-3E01C PAYLOAD\n-\n-40200 DATA DESCRIPTOR       08074B50 (134695760)\n-40204 CRC                   1140D3D7 (289461207)\n-40208 Compressed Size       000021E4 (8676)\n-4020C Uncompressed Size     000021E4 (8676)\n-\n-40210 LOCAL HEADER #86      04034B50 (67324752)\n-40214 Extract Zip Spec      14 (20) '2.0'\n-40215 Extract OS            00 (0) 'MS-DOS'\n-40216 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-40218 Compression Method    0000 (0) 'Stored'\n-4021A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4021E CRC                   00000000 (0)\n-40222 Compressed Size       00000000 (0)\n-40226 Uncompressed Size     00000000 (0)\n-4022A Filename Length       0035 (53)\n-4022C Extra Length          0009 (9)\n-4022E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4022E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-40263 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-40265   Length              0005 (5)\n-40267   Flags               01 (1) 'Modification'\n-40268   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-4026C PAYLOAD\n-\n-411C2 DATA DESCRIPTOR       08074B50 (134695760)\n-411C6 CRC                   90398B66 (2419690342)\n-411CA Compressed Size       00000F56 (3926)\n-411CE Uncompressed Size     00000F56 (3926)\n-\n-411D2 LOCAL HEADER #87      04034B50 (67324752)\n-411D6 Extract Zip Spec      14 (20) '2.0'\n-411D7 Extract OS            00 (0) 'MS-DOS'\n-411D8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-411DA Compression Method    0000 (0) 'Stored'\n-411DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-411E0 CRC                   00000000 (0)\n-411E4 Compressed Size       00000000 (0)\n-411E8 Uncompressed Size     00000000 (0)\n-411EC Filename Length       002D (45)\n-411EE Extra Length          0009 (9)\n-411F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x411F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4121D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4121F   Length              0005 (5)\n-41221   Flags               01 (1) 'Modification'\n-41222   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-41226 PAYLOAD\n-\n-421CF DATA DESCRIPTOR       08074B50 (134695760)\n-421D3 CRC                   8054E5B8 (2153047480)\n-421D7 Compressed Size       00000FA9 (4009)\n-421DB Uncompressed Size     00000FA9 (4009)\n-\n-421DF LOCAL HEADER #88      04034B50 (67324752)\n-421E3 Extract Zip Spec      14 (20) '2.0'\n-421E4 Extract OS            00 (0) 'MS-DOS'\n-421E5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-421E7 Compression Method    0000 (0) 'Stored'\n-421E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-421ED CRC                   00000000 (0)\n-421F1 Compressed Size       00000000 (0)\n-421F5 Uncompressed Size     00000000 (0)\n-421F9 Filename Length       0031 (49)\n-421FB Extra Length          0009 (9)\n-421FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x421FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4222E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-42230   Length              0005 (5)\n-42232   Flags               01 (1) 'Modification'\n-42233   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-42237 PAYLOAD\n-\n-42964 DATA DESCRIPTOR       08074B50 (134695760)\n-42968 CRC                   873A5673 (2268747379)\n-4296C Compressed Size       0000072D (1837)\n-42970 Uncompressed Size     0000072D (1837)\n-\n-42974 LOCAL HEADER #89      04034B50 (67324752)\n-42978 Extract Zip Spec      14 (20) '2.0'\n-42979 Extract OS            00 (0) 'MS-DOS'\n-4297A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4297C Compression Method    0000 (0) 'Stored'\n-4297E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-42982 CRC                   00000000 (0)\n-42986 Compressed Size       00000000 (0)\n-4298A Uncompressed Size     00000000 (0)\n-4298E Filename Length       0038 (56)\n-42990 Extra Length          0009 (9)\n-42992 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x42992: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-429CA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-429CC   Length              0005 (5)\n-429CE   Flags               01 (1) 'Modification'\n-429CF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-429D3 PAYLOAD\n-\n-43723 DATA DESCRIPTOR       08074B50 (134695760)\n-43727 CRC                   B63E72D7 (3057545943)\n-4372B Compressed Size       00000D50 (3408)\n-4372F Uncompressed Size     00000D50 (3408)\n-\n-43733 LOCAL HEADER #90      04034B50 (67324752)\n-43737 Extract Zip Spec      14 (20) '2.0'\n-43738 Extract OS            00 (0) 'MS-DOS'\n-43739 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4373B Compression Method    0000 (0) 'Stored'\n-4373D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-43741 CRC                   00000000 (0)\n-43745 Compressed Size       00000000 (0)\n-43749 Uncompressed Size     00000000 (0)\n-4374D Filename Length       003A (58)\n-4374F Extra Length          0009 (9)\n-43751 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x43751: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4378B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4378D   Length              0005 (5)\n-4378F   Flags               01 (1) 'Modification'\n-43790   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-43794 PAYLOAD\n-\n-444AC DATA DESCRIPTOR       08074B50 (134695760)\n-444B0 CRC                   C40EC84E (3289303118)\n-444B4 Compressed Size       00000D18 (3352)\n-444B8 Uncompressed Size     00000D18 (3352)\n-\n-444BC LOCAL HEADER #91      04034B50 (67324752)\n-444C0 Extract Zip Spec      14 (20) '2.0'\n-444C1 Extract OS            00 (0) 'MS-DOS'\n-444C2 General Purpose Flag  0000 (0)\n-444C4 Compression Method    0000 (0) 'Stored'\n-444C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-444CA CRC                   00000000 (0)\n-444CE Compressed Size       00000000 (0)\n-444D2 Uncompressed Size     00000000 (0)\n-444D6 Filename Length       0024 (36)\n-444D8 Extra Length          0009 (9)\n-444DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x444DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-444FE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-44500   Length              0005 (5)\n-44502   Flags               01 (1) 'Modification'\n-44503   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-44507 LOCAL HEADER #92      04034B50 (67324752)\n-4450B Extract Zip Spec      14 (20) '2.0'\n-4450C Extract OS            00 (0) 'MS-DOS'\n-4450D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4450F Compression Method    0000 (0) 'Stored'\n-44511 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-44515 CRC                   00000000 (0)\n-44519 Compressed Size       00000000 (0)\n-4451D Uncompressed Size     00000000 (0)\n-44521 Filename Length       0036 (54)\n-44523 Extra Length          0009 (9)\n-44525 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x44525: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4455B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4455D   Length              0005 (5)\n-4455F   Flags               01 (1) 'Modification'\n-44560   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-44564 PAYLOAD\n-\n-45312 DATA DESCRIPTOR       08074B50 (134695760)\n-45316 CRC                   7D5510EE (2102726894)\n-4531A Compressed Size       00000DAE (3502)\n-4531E Uncompressed Size     00000DAE (3502)\n-\n-45322 LOCAL HEADER #93      04034B50 (67324752)\n-45326 Extract Zip Spec      14 (20) '2.0'\n-45327 Extract OS            00 (0) 'MS-DOS'\n-45328 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4532A Compression Method    0000 (0) 'Stored'\n-4532C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-45330 CRC                   00000000 (0)\n-45334 Compressed Size       00000000 (0)\n-45338 Uncompressed Size     00000000 (0)\n-4533C Filename Length       0035 (53)\n-4533E Extra Length          0009 (9)\n-45340 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x45340: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-45375 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-45377   Length              0005 (5)\n-45379   Flags               01 (1) 'Modification'\n-4537A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-4537E PAYLOAD\n-\n-45787 DATA DESCRIPTOR       08074B50 (134695760)\n-4578B CRC                   FC4D9CC7 (4232944839)\n-4578F Compressed Size       00000409 (1033)\n-45793 Uncompressed Size     00000409 (1033)\n-\n-45797 LOCAL HEADER #94      04034B50 (67324752)\n-4579B Extract Zip Spec      14 (20) '2.0'\n-4579C Extract OS            00 (0) 'MS-DOS'\n-4579D General Purpose Flag  0000 (0)\n-4579F Compression Method    0000 (0) 'Stored'\n-457A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-457A5 CRC                   00000000 (0)\n-457A9 Compressed Size       00000000 (0)\n-457AD Uncompressed Size     00000000 (0)\n-457B1 Filename Length       001B (27)\n-457B3 Extra Length          0009 (9)\n-457B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x457B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-457D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-457D2   Length              0005 (5)\n-457D4   Flags               01 (1) 'Modification'\n-457D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-457D9 LOCAL HEADER #95      04034B50 (67324752)\n-457DD Extract Zip Spec      14 (20) '2.0'\n-457DE Extract OS            00 (0) 'MS-DOS'\n-457DF General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-457E1 Compression Method    0000 (0) 'Stored'\n-457E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-457E7 CRC                   00000000 (0)\n-457EB Compressed Size       00000000 (0)\n-457EF Uncompressed Size     00000000 (0)\n-457F3 Filename Length       0034 (52)\n-457F5 Extra Length          0009 (9)\n-457F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x457F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4582B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4582D   Length              0005 (5)\n-4582F   Flags               01 (1) 'Modification'\n-45830   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-45834 PAYLOAD\n-\n-464E2 DATA DESCRIPTOR       08074B50 (134695760)\n-464E6 CRC                   E40DEA4B (3826117195)\n-464EA Compressed Size       00000CAE (3246)\n-464EE Uncompressed Size     00000CAE (3246)\n-\n-464F2 LOCAL HEADER #96      04034B50 (67324752)\n-464F6 Extract Zip Spec      14 (20) '2.0'\n-464F7 Extract OS            00 (0) 'MS-DOS'\n-464F8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-464FA Compression Method    0000 (0) 'Stored'\n-464FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-46500 CRC                   00000000 (0)\n-46504 Compressed Size       00000000 (0)\n-46508 Uncompressed Size     00000000 (0)\n-4650C Filename Length       0034 (52)\n-4650E Extra Length          0009 (9)\n-46510 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x46510: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-46544 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-46546   Length              0005 (5)\n-46548   Flags               01 (1) 'Modification'\n-46549   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-4654D PAYLOAD\n-\n-4783D DATA DESCRIPTOR       08074B50 (134695760)\n-47841 CRC                   7B8AE3FF (2072699903)\n-47845 Compressed Size       000012F0 (4848)\n-47849 Uncompressed Size     000012F0 (4848)\n-\n-4784D LOCAL HEADER #97      04034B50 (67324752)\n-47851 Extract Zip Spec      14 (20) '2.0'\n-47852 Extract OS            00 (0) 'MS-DOS'\n-47853 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-47855 Compression Method    0000 (0) 'Stored'\n-47857 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4785B CRC                   00000000 (0)\n-4785F Compressed Size       00000000 (0)\n-47863 Uncompressed Size     00000000 (0)\n-47867 Filename Length       0038 (56)\n-47869 Extra Length          0009 (9)\n-4786B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4786B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-478A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-478A5   Length              0005 (5)\n-478A7   Flags               01 (1) 'Modification'\n-478A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-478AC PAYLOAD\n-\n-487BD DATA DESCRIPTOR       08074B50 (134695760)\n-487C1 CRC                   19702ABA (426781370)\n-487C5 Compressed Size       00000F11 (3857)\n-487C9 Uncompressed Size     00000F11 (3857)\n-\n-487CD LOCAL HEADER #98      04034B50 (67324752)\n-487D1 Extract Zip Spec      14 (20) '2.0'\n-487D2 Extract OS            00 (0) 'MS-DOS'\n-487D3 General Purpose Flag  0000 (0)\n-487D5 Compression Method    0000 (0) 'Stored'\n-487D7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-487DB CRC                   00000000 (0)\n-487DF Compressed Size       00000000 (0)\n-487E3 Uncompressed Size     00000000 (0)\n-487E7 Filename Length       0025 (37)\n-487E9 Extra Length          0009 (9)\n-487EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x487EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-48810 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-48812   Length              0005 (5)\n-48814   Flags               01 (1) 'Modification'\n-48815   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-48819 LOCAL HEADER #99      04034B50 (67324752)\n-4881D Extract Zip Spec      14 (20) '2.0'\n-4881E Extract OS            00 (0) 'MS-DOS'\n-4881F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-48821 Compression Method    0000 (0) 'Stored'\n-48823 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-48827 CRC                   00000000 (0)\n-4882B Compressed Size       00000000 (0)\n-4882F Uncompressed Size     00000000 (0)\n-48833 Filename Length       003F (63)\n-48835 Extra Length          0009 (9)\n-48837 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x48837: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-48876 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-48878   Length              0005 (5)\n-4887A   Flags               01 (1) 'Modification'\n-4887B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-4887F PAYLOAD\n-\n-4913B DATA DESCRIPTOR       08074B50 (134695760)\n-4913F CRC                   763975AF (1983477167)\n-49143 Compressed Size       000008BC (2236)\n-49147 Uncompressed Size     000008BC (2236)\n-\n-4914B LOCAL HEADER #100     04034B50 (67324752)\n-4914F Extract Zip Spec      14 (20) '2.0'\n-49150 Extract OS            00 (0) 'MS-DOS'\n-49151 General Purpose Flag  0000 (0)\n-49153 Compression Method    0000 (0) 'Stored'\n-49155 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-49159 CRC                   00000000 (0)\n-4915D Compressed Size       00000000 (0)\n-49161 Uncompressed Size     00000000 (0)\n-49165 Filename Length       001F (31)\n-49167 Extra Length          0009 (9)\n-49169 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x49169: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-49188 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4918A   Length              0005 (5)\n-4918C   Flags               01 (1) 'Modification'\n-4918D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-49191 LOCAL HEADER #101     04034B50 (67324752)\n-49195 Extract Zip Spec      14 (20) '2.0'\n-49196 Extract OS            00 (0) 'MS-DOS'\n-49197 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-49199 Compression Method    0000 (0) 'Stored'\n-4919B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4919F CRC                   00000000 (0)\n-491A3 Compressed Size       00000000 (0)\n-491A7 Uncompressed Size     00000000 (0)\n-491AB Filename Length       0033 (51)\n-491AD Extra Length          0009 (9)\n-491AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x491AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-491E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-491E4   Length              0005 (5)\n-491E6   Flags               01 (1) 'Modification'\n-491E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-491EB PAYLOAD\n-\n-49A37 DATA DESCRIPTOR       08074B50 (134695760)\n-49A3B CRC                   776F6B16 (2003790614)\n-49A3F Compressed Size       0000084C (2124)\n-49A43 Uncompressed Size     0000084C (2124)\n-\n-49A47 LOCAL HEADER #102     04034B50 (67324752)\n-49A4B Extract Zip Spec      14 (20) '2.0'\n-49A4C Extract OS            00 (0) 'MS-DOS'\n-49A4D General Purpose Flag  0000 (0)\n-49A4F Compression Method    0000 (0) 'Stored'\n-49A51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-49A55 CRC                   00000000 (0)\n-49A59 Compressed Size       00000000 (0)\n-49A5D Uncompressed Size     00000000 (0)\n-49A61 Filename Length       0023 (35)\n-49A63 Extra Length          0009 (9)\n-49A65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x49A65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-49A88 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-49A8A   Length              0005 (5)\n-49A8C   Flags               01 (1) 'Modification'\n-49A8D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-49A91 LOCAL HEADER #103     04034B50 (67324752)\n-49A95 Extract Zip Spec      14 (20) '2.0'\n-49A96 Extract OS            00 (0) 'MS-DOS'\n-49A97 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-49A99 Compression Method    0000 (0) 'Stored'\n-49A9B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-49A9F CRC                   00000000 (0)\n-49AA3 Compressed Size       00000000 (0)\n-49AA7 Uncompressed Size     00000000 (0)\n-49AAB Filename Length       003F (63)\n-49AAD Extra Length          0009 (9)\n-49AAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x49AAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-49AEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-49AF0   Length              0005 (5)\n-49AF2   Flags               01 (1) 'Modification'\n-49AF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-49AF7 PAYLOAD\n-\n-4B1C9 DATA DESCRIPTOR       08074B50 (134695760)\n-4B1CD CRC                   A1EB5EED (2716557037)\n-4B1D1 Compressed Size       000016D2 (5842)\n-4B1D5 Uncompressed Size     000016D2 (5842)\n-\n-4B1D9 LOCAL HEADER #104     04034B50 (67324752)\n-4B1DD Extract Zip Spec      14 (20) '2.0'\n-4B1DE Extract OS            00 (0) 'MS-DOS'\n-4B1DF General Purpose Flag  0000 (0)\n-4B1E1 Compression Method    0000 (0) 'Stored'\n-4B1E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4B1E7 CRC                   00000000 (0)\n-4B1EB Compressed Size       00000000 (0)\n-4B1EF Uncompressed Size     00000000 (0)\n-4B1F3 Filename Length       001D (29)\n-4B1F5 Extra Length          0009 (9)\n-4B1F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4B1F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4B214 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4B216   Length              0005 (5)\n-4B218   Flags               01 (1) 'Modification'\n-4B219   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-4B21D LOCAL HEADER #105     04034B50 (67324752)\n-4B221 Extract Zip Spec      14 (20) '2.0'\n-4B222 Extract OS            00 (0) 'MS-DOS'\n-4B223 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4B225 Compression Method    0000 (0) 'Stored'\n-4B227 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4B22B CRC                   00000000 (0)\n-4B22F Compressed Size       00000000 (0)\n-4B233 Uncompressed Size     00000000 (0)\n-4B237 Filename Length       002F (47)\n-4B239 Extra Length          0009 (9)\n-4B23B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4B23B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4B26A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4B26C   Length              0005 (5)\n-4B26E   Flags               01 (1) 'Modification'\n-4B26F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-4B273 PAYLOAD\n-\n-4D15A DATA DESCRIPTOR       08074B50 (134695760)\n-4D15E CRC                   71347931 (1899264305)\n-4D162 Compressed Size       00001EE7 (7911)\n-4D166 Uncompressed Size     00001EE7 (7911)\n-\n-4D16A LOCAL HEADER #106     04034B50 (67324752)\n-4D16E Extract Zip Spec      14 (20) '2.0'\n-4D16F Extract OS            00 (0) 'MS-DOS'\n-4D170 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4D172 Compression Method    0000 (0) 'Stored'\n-4D174 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4D178 CRC                   00000000 (0)\n-4D17C Compressed Size       00000000 (0)\n-4D180 Uncompressed Size     00000000 (0)\n-4D184 Filename Length       002D (45)\n-4D186 Extra Length          0009 (9)\n-4D188 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4D188: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4D1B5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4D1B7   Length              0005 (5)\n-4D1B9   Flags               01 (1) 'Modification'\n-4D1BA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-4D1BE PAYLOAD\n-\n-4FD13 DATA DESCRIPTOR       08074B50 (134695760)\n-4FD17 CRC                   E459791A (3831068954)\n-4FD1B Compressed Size       00002B55 (11093)\n-4FD1F Uncompressed Size     00002B55 (11093)\n-\n-4FD23 LOCAL HEADER #107     04034B50 (67324752)\n-4FD27 Extract Zip Spec      14 (20) '2.0'\n-4FD28 Extract OS            00 (0) 'MS-DOS'\n-4FD29 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-4FD2B Compression Method    0000 (0) 'Stored'\n-4FD2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-4FD31 CRC                   00000000 (0)\n-4FD35 Compressed Size       00000000 (0)\n-4FD39 Uncompressed Size     00000000 (0)\n-4FD3D Filename Length       002E (46)\n-4FD3F Extra Length          0009 (9)\n-4FD41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x4FD41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-4FD6F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-4FD71   Length              0005 (5)\n-4FD73   Flags               01 (1) 'Modification'\n-4FD74   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-4FD78 PAYLOAD\n-\n-503D6 DATA DESCRIPTOR       08074B50 (134695760)\n-503DA CRC                   80C30D3D (2160266557)\n-503DE Compressed Size       0000065E (1630)\n-503E2 Uncompressed Size     0000065E (1630)\n-\n-503E6 LOCAL HEADER #108     04034B50 (67324752)\n-503EA Extract Zip Spec      14 (20) '2.0'\n-503EB Extract OS            00 (0) 'MS-DOS'\n-503EC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-503EE Compression Method    0000 (0) 'Stored'\n-503F0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-503F4 CRC                   00000000 (0)\n-503F8 Compressed Size       00000000 (0)\n-503FC Uncompressed Size     00000000 (0)\n-50400 Filename Length       002A (42)\n-50402 Extra Length          0009 (9)\n-50404 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x50404: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5042E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-50430   Length              0005 (5)\n-50432   Flags               01 (1) 'Modification'\n-50433   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-50437 PAYLOAD\n-\n-52F6D DATA DESCRIPTOR       08074B50 (134695760)\n-52F71 CRC                   613BF150 (1631318352)\n-52F75 Compressed Size       00002B36 (11062)\n-52F79 Uncompressed Size     00002B36 (11062)\n-\n-52F7D CENTRAL HEADER #1     02014B50 (33639248)\n-52F81 Created Zip Spec      14 (20) '2.0'\n-52F82 Created OS            00 (0) 'MS-DOS'\n-52F83 Extract Zip Spec      14 (20) '2.0'\n-52F84 Extract OS            00 (0) 'MS-DOS'\n-52F85 General Purpose Flag  0000 (0)\n-52F87 Compression Method    0000 (0) 'Stored'\n-52F89 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52F8D CRC                   00000000 (0)\n-52F91 Compressed Size       00000000 (0)\n-52F95 Uncompressed Size     00000000 (0)\n-52F99 Filename Length       0009 (9)\n-52F9B Extra Length          0009 (9)\n-52F9D Comment Length        0000 (0)\n-52F9F Disk Start            0000 (0)\n-52FA1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-52FA3 Ext File Attributes   00000000 (0)\n-52FA7 Local Header Offset   00000000 (0)\n-52FAB Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FAB: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-52FB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-52FB6   Length              0005 (5)\n-52FB8   Flags               01 (1) 'Modification'\n-52FB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-52FBD CENTRAL HEADER #2     02014B50 (33639248)\n-52FC1 Created Zip Spec      14 (20) '2.0'\n-52FC2 Created OS            00 (0) 'MS-DOS'\n-52FC3 Extract Zip Spec      14 (20) '2.0'\n-52FC4 Extract OS            00 (0) 'MS-DOS'\n-52FC5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-52FC7 Compression Method    0000 (0) 'Stored'\n-52FC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-52FCD CRC                   78DBB6D9 (2027665113)\n-52FD1 Compressed Size       000009EA (2538)\n-52FD5 Uncompressed Size     000009EA (2538)\n-52FD9 Filename Length       0015 (21)\n-52FDB Extra Length          0009 (9)\n-52FDD Comment Length        0000 (0)\n-52FDF Disk Start            0000 (0)\n-52FE1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-52FE3 Ext File Attributes   00000000 (0)\n-52FE7 Local Header Offset   00000030 (48)\n-52FEB Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x52FEB: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53000 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53002   Length              0005 (5)\n-53004   Flags               01 (1) 'Modification'\n-53005   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53009 CENTRAL HEADER #3     02014B50 (33639248)\n-5300D Created Zip Spec      14 (20) '2.0'\n-5300E Created OS            00 (0) 'MS-DOS'\n-5300F Extract Zip Spec      14 (20) '2.0'\n-53010 Extract OS            00 (0) 'MS-DOS'\n-53011 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53013 Compression Method    0000 (0) 'Stored'\n-53015 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53019 CRC                   86E2B4B4 (2263004340)\n-5301D Compressed Size       00002C5E (11358)\n-53021 Uncompressed Size     00002C5E (11358)\n-53025 Filename Length       0010 (16)\n-53027 Extra Length          0009 (9)\n-53029 Comment Length        0000 (0)\n-5302B Disk Start            0000 (0)\n-5302D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5302F Ext File Attributes   00000000 (0)\n-53033 Local Header Offset   00000A66 (2662)\n-53037 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53037: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53047 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53049   Length              0005 (5)\n-5304B   Flags               01 (1) 'Modification'\n-5304C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53050 CENTRAL HEADER #4     02014B50 (33639248)\n-53054 Created Zip Spec      14 (20) '2.0'\n-53055 Created OS            00 (0) 'MS-DOS'\n-53056 Extract Zip Spec      14 (20) '2.0'\n-53057 Extract OS            00 (0) 'MS-DOS'\n-53058 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5305A Compression Method    0000 (0) 'Stored'\n-5305C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53060 CRC                   EE027FB2 (3993141170)\n-53064 Compressed Size       00000019 (25)\n-53068 Uncompressed Size     00000019 (25)\n-5306C Filename Length       0014 (20)\n-5306E Extra Length          0009 (9)\n-53070 Comment Length        0000 (0)\n-53072 Disk Start            0000 (0)\n-53074 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53076 Ext File Attributes   00000000 (0)\n-5307A Local Header Offset   0000370B (14091)\n-5307E Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5307E: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53092 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53094   Length              0005 (5)\n-53096   Flags               01 (1) 'Modification'\n-53097   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5309B CENTRAL HEADER #5     02014B50 (33639248)\n-5309F Created Zip Spec      14 (20) '2.0'\n-530A0 Created OS            00 (0) 'MS-DOS'\n-530A1 Extract Zip Spec      14 (20) '2.0'\n-530A2 Extract OS            00 (0) 'MS-DOS'\n-530A3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-530A5 Compression Method    0000 (0) 'Stored'\n-530A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530AB CRC                   4EE5121F (1323635231)\n-530AF Compressed Size       000000AA (170)\n-530B3 Uncompressed Size     000000AA (170)\n-530B7 Filename Length       000F (15)\n-530B9 Extra Length          0009 (9)\n-530BB Comment Length        0000 (0)\n-530BD Disk Start            0000 (0)\n-530BF Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-530C1 Ext File Attributes   00000000 (0)\n-530C5 Local Header Offset   0000376F (14191)\n-530C9 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x530C9: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-530D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-530DA   Length              0005 (5)\n-530DC   Flags               01 (1) 'Modification'\n-530DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-530E1 CENTRAL HEADER #6     02014B50 (33639248)\n-530E5 Created Zip Spec      14 (20) '2.0'\n-530E6 Created OS            00 (0) 'MS-DOS'\n-530E7 Extract Zip Spec      14 (20) '2.0'\n-530E8 Extract OS            00 (0) 'MS-DOS'\n-530E9 General Purpose Flag  0000 (0)\n-530EB Compression Method    0000 (0) 'Stored'\n-530ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-530F1 CRC                   00000000 (0)\n-530F5 Compressed Size       00000000 (0)\n-530F9 Uncompressed Size     00000000 (0)\n-530FD Filename Length       000F (15)\n-530FF Extra Length          0009 (9)\n-53101 Comment Length        0000 (0)\n-53103 Disk Start            0000 (0)\n-53105 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53107 Ext File Attributes   00000000 (0)\n-5310B Local Header Offset   0000385F (14431)\n-5310F Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5310F: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5311E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53120   Length              0005 (5)\n-53122   Flags               01 (1) 'Modification'\n-53123   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53127 CENTRAL HEADER #7     02014B50 (33639248)\n-5312B Created Zip Spec      14 (20) '2.0'\n-5312C Created OS            00 (0) 'MS-DOS'\n-5312D Extract Zip Spec      14 (20) '2.0'\n-5312E Extract OS            00 (0) 'MS-DOS'\n-5312F General Purpose Flag  0000 (0)\n-53131 Compression Method    0000 (0) 'Stored'\n-53133 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53137 CRC                   00000000 (0)\n-5313B Compressed Size       00000000 (0)\n-5313F Uncompressed Size     00000000 (0)\n-53143 Filename Length       0018 (24)\n-53145 Extra Length          0009 (9)\n-53147 Comment Length        0000 (0)\n-53149 Disk Start            0000 (0)\n-5314B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5314D Ext File Attributes   00000000 (0)\n-53151 Local Header Offset   00003895 (14485)\n-53155 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53155: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5316D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5316F   Length              0005 (5)\n-53171   Flags               01 (1) 'Modification'\n-53172   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53176 CENTRAL HEADER #8     02014B50 (33639248)\n-5317A Created Zip Spec      14 (20) '2.0'\n-5317B Created OS            00 (0) 'MS-DOS'\n-5317C Extract Zip Spec      14 (20) '2.0'\n-5317D Extract OS            00 (0) 'MS-DOS'\n-5317E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53180 Compression Method    0000 (0) 'Stored'\n-53182 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53186 CRC                   2F9D6707 (798844679)\n-5318A Compressed Size       00000334 (820)\n-5318E Uncompressed Size     00000334 (820)\n-53192 Filename Length       0033 (51)\n-53194 Extra Length          0009 (9)\n-53196 Comment Length        0000 (0)\n-53198 Disk Start            0000 (0)\n-5319A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5319C Ext File Attributes   00000000 (0)\n-531A0 Local Header Offset   000038D4 (14548)\n-531A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x531A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-531D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-531D9   Length              0005 (5)\n-531DB   Flags               01 (1) 'Modification'\n-531DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-531E0 CENTRAL HEADER #9     02014B50 (33639248)\n-531E4 Created Zip Spec      14 (20) '2.0'\n-531E5 Created OS            00 (0) 'MS-DOS'\n-531E6 Extract Zip Spec      14 (20) '2.0'\n-531E7 Extract OS            00 (0) 'MS-DOS'\n-531E8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-531EA Compression Method    0000 (0) 'Stored'\n-531EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-531F0 CRC                   59884A10 (1502104080)\n-531F4 Compressed Size       00000042 (66)\n-531F8 Uncompressed Size     00000042 (66)\n-531FC Filename Length       003C (60)\n-531FE Extra Length          0009 (9)\n-53200 Comment Length        0000 (0)\n-53202 Disk Start            0000 (0)\n-53204 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53206 Ext File Attributes   00000000 (0)\n-5320A Local Header Offset   00003C72 (15474)\n-5320E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5320E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5324A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5324C   Length              0005 (5)\n-5324E   Flags               01 (1) 'Modification'\n-5324F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53253 CENTRAL HEADER #10    02014B50 (33639248)\n-53257 Created Zip Spec      14 (20) '2.0'\n-53258 Created OS            00 (0) 'MS-DOS'\n-53259 Extract Zip Spec      14 (20) '2.0'\n-5325A Extract OS            00 (0) 'MS-DOS'\n-5325B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5325D Compression Method    0000 (0) 'Stored'\n-5325F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53263 CRC                   A08C1C8C (2693536908)\n-53267 Compressed Size       000000AA (170)\n-5326B Uncompressed Size     000000AA (170)\n-5326F Filename Length       0035 (53)\n-53271 Extra Length          0009 (9)\n-53273 Comment Length        0000 (0)\n-53275 Disk Start            0000 (0)\n-53277 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53279 Ext File Attributes   00000000 (0)\n-5327D Local Header Offset   00003D27 (15655)\n-53281 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53281: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-532B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-532B8   Length              0005 (5)\n-532BA   Flags               01 (1) 'Modification'\n-532BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-532BF CENTRAL HEADER #11    02014B50 (33639248)\n-532C3 Created Zip Spec      14 (20) '2.0'\n-532C4 Created OS            00 (0) 'MS-DOS'\n-532C5 Extract Zip Spec      14 (20) '2.0'\n-532C6 Extract OS            00 (0) 'MS-DOS'\n-532C7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-532C9 Compression Method    0000 (0) 'Stored'\n-532CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-532CF CRC                   B40DDFAC (3020808108)\n-532D3 Compressed Size       000000B9 (185)\n-532D7 Uncompressed Size     000000B9 (185)\n-532DB Filename Length       0039 (57)\n-532DD Extra Length          0009 (9)\n-532DF Comment Length        0000 (0)\n-532E1 Disk Start            0000 (0)\n-532E3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-532E5 Ext File Attributes   00000000 (0)\n-532E9 Local Header Offset   00003E3D (15933)\n-532ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x532ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53326 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53328   Length              0005 (5)\n-5332A   Flags               01 (1) 'Modification'\n-5332B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5332F CENTRAL HEADER #12    02014B50 (33639248)\n-53333 Created Zip Spec      14 (20) '2.0'\n-53334 Created OS            00 (0) 'MS-DOS'\n-53335 Extract Zip Spec      14 (20) '2.0'\n-53336 Extract OS            00 (0) 'MS-DOS'\n-53337 General Purpose Flag  0000 (0)\n-53339 Compression Method    0000 (0) 'Stored'\n-5333B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5333F CRC                   00000000 (0)\n-53343 Compressed Size       00000000 (0)\n-53347 Uncompressed Size     00000000 (0)\n-5334B Filename Length       000F (15)\n-5334D Extra Length          0009 (9)\n-5334F Comment Length        0000 (0)\n-53351 Disk Start            0000 (0)\n-53353 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53355 Ext File Attributes   00000000 (0)\n-53359 Local Header Offset   00003F66 (16230)\n-5335D Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5335D: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5336C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5336E   Length              0005 (5)\n-53370   Flags               01 (1) 'Modification'\n-53371   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53375 CENTRAL HEADER #13    02014B50 (33639248)\n-53379 Created Zip Spec      14 (20) '2.0'\n-5337A Created OS            00 (0) 'MS-DOS'\n-5337B Extract Zip Spec      14 (20) '2.0'\n-5337C Extract OS            00 (0) 'MS-DOS'\n-5337D General Purpose Flag  0000 (0)\n-5337F Compression Method    0000 (0) 'Stored'\n-53381 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53385 CRC                   00000000 (0)\n-53389 Compressed Size       00000000 (0)\n-5338D Uncompressed Size     00000000 (0)\n-53391 Filename Length       0020 (32)\n-53393 Extra Length          0009 (9)\n-53395 Comment Length        0000 (0)\n-53397 Disk Start            0000 (0)\n-53399 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5339B Ext File Attributes   00000000 (0)\n-5339F Local Header Offset   00003F9C (16284)\n-533A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-533C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-533C5   Length              0005 (5)\n-533C7   Flags               01 (1) 'Modification'\n-533C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-533CC CENTRAL HEADER #14    02014B50 (33639248)\n-533D0 Created Zip Spec      14 (20) '2.0'\n-533D1 Created OS            00 (0) 'MS-DOS'\n-533D2 Extract Zip Spec      14 (20) '2.0'\n-533D3 Extract OS            00 (0) 'MS-DOS'\n-533D4 General Purpose Flag  0000 (0)\n-533D6 Compression Method    0000 (0) 'Stored'\n-533D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-533DC CRC                   00000000 (0)\n-533E0 Compressed Size       00000000 (0)\n-533E4 Uncompressed Size     00000000 (0)\n-533E8 Filename Length       002E (46)\n-533EA Extra Length          0009 (9)\n-533EC Comment Length        0000 (0)\n-533EE Disk Start            0000 (0)\n-533F0 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-533F2 Ext File Attributes   00000000 (0)\n-533F6 Local Header Offset   00003FE3 (16355)\n-533FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x533FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53428 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5342A   Length              0005 (5)\n-5342C   Flags               01 (1) 'Modification'\n-5342D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53431 CENTRAL HEADER #15    02014B50 (33639248)\n-53435 Created Zip Spec      14 (20) '2.0'\n-53436 Created OS            00 (0) 'MS-DOS'\n-53437 Extract Zip Spec      14 (20) '2.0'\n-53438 Extract OS            00 (0) 'MS-DOS'\n-53439 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5343B Compression Method    0000 (0) 'Stored'\n-5343D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53441 CRC                   00000000 (0)\n-53445 Compressed Size       00000000 (0)\n-53449 Uncompressed Size     00000000 (0)\n-5344D Filename Length       003C (60)\n-5344F Extra Length          0009 (9)\n-53451 Comment Length        0000 (0)\n-53453 Disk Start            0000 (0)\n-53455 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53457 Ext File Attributes   00000000 (0)\n-5345B Local Header Offset   00004038 (16440)\n-5345F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5345F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5349B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5349D   Length              0005 (5)\n-5349F   Flags               01 (1) 'Modification'\n-534A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-534A4 CENTRAL HEADER #16    02014B50 (33639248)\n-534A8 Created Zip Spec      14 (20) '2.0'\n-534A9 Created OS            00 (0) 'MS-DOS'\n-534AA Extract Zip Spec      14 (20) '2.0'\n-534AB Extract OS            00 (0) 'MS-DOS'\n-534AC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-534AE Compression Method    0000 (0) 'Stored'\n-534B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-534B4 CRC                   0FC7AABB (264743611)\n-534B8 Compressed Size       000009B0 (2480)\n-534BC Uncompressed Size     000009B0 (2480)\n-534C0 Filename Length       0035 (53)\n-534C2 Extra Length          0009 (9)\n-534C4 Comment Length        0000 (0)\n-534C6 Disk Start            0000 (0)\n-534C8 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-534CA Ext File Attributes   00000000 (0)\n-534CE Local Header Offset   000040AB (16555)\n-534D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x534D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53507 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53509   Length              0005 (5)\n-5350B   Flags               01 (1) 'Modification'\n-5350C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53510 CENTRAL HEADER #17    02014B50 (33639248)\n-53514 Created Zip Spec      14 (20) '2.0'\n-53515 Created OS            00 (0) 'MS-DOS'\n-53516 Extract Zip Spec      14 (20) '2.0'\n-53517 Extract OS            00 (0) 'MS-DOS'\n-53518 General Purpose Flag  0000 (0)\n-5351A Compression Method    0000 (0) 'Stored'\n-5351C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53520 CRC                   00000000 (0)\n-53524 Compressed Size       00000000 (0)\n-53528 Uncompressed Size     00000000 (0)\n-5352C Filename Length       0004 (4)\n-5352E Extra Length          0009 (9)\n-53530 Comment Length        0000 (0)\n-53532 Disk Start            0000 (0)\n-53534 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53536 Ext File Attributes   00000000 (0)\n-5353A Local Header Offset   00004AC7 (19143)\n-5353E Filename              'XXXX'\n-#\n-# WARNING: Offset 0x5353E: Filename 'XXXX'\n-#          Zero length filename\n-#\n-53542 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53544   Length              0005 (5)\n-53546   Flags               01 (1) 'Modification'\n-53547   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5354B CENTRAL HEADER #18    02014B50 (33639248)\n-5354F Created Zip Spec      14 (20) '2.0'\n-53550 Created OS            00 (0) 'MS-DOS'\n-53551 Extract Zip Spec      14 (20) '2.0'\n-53552 Extract OS            00 (0) 'MS-DOS'\n-53553 General Purpose Flag  0000 (0)\n-53555 Compression Method    0000 (0) 'Stored'\n-53557 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5355B CRC                   00000000 (0)\n-5355F Compressed Size       00000000 (0)\n-53563 Uncompressed Size     00000000 (0)\n-53567 Filename Length       000C (12)\n-53569 Extra Length          0009 (9)\n-5356B Comment Length        0000 (0)\n-5356D Disk Start            0000 (0)\n-5356F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53571 Ext File Attributes   00000000 (0)\n-53575 Local Header Offset   00004AF2 (19186)\n-53579 Filename              'XXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53579: Filename 'XXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53585 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53587   Length              0005 (5)\n-53589   Flags               01 (1) 'Modification'\n-5358A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5358E CENTRAL HEADER #19    02014B50 (33639248)\n-53592 Created Zip Spec      14 (20) '2.0'\n-53593 Created OS            00 (0) 'MS-DOS'\n-53594 Extract Zip Spec      14 (20) '2.0'\n-53595 Extract OS            00 (0) 'MS-DOS'\n-53596 General Purpose Flag  0000 (0)\n-53598 Compression Method    0000 (0) 'Stored'\n-5359A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5359E CRC                   00000000 (0)\n-535A2 Compressed Size       00000000 (0)\n-535A6 Uncompressed Size     00000000 (0)\n-535AA Filename Length       0012 (18)\n-535AC Extra Length          0009 (9)\n-535AE Comment Length        0000 (0)\n-535B0 Disk Start            0000 (0)\n-535B2 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-535B4 Ext File Attributes   00000000 (0)\n-535B8 Local Header Offset   00004B25 (19237)\n-535BC Filename              'XXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x535BC: Filename 'XXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-535CE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-535D0   Length              0005 (5)\n-535D2   Flags               01 (1) 'Modification'\n-535D3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-535D7 CENTRAL HEADER #20    02014B50 (33639248)\n-535DB Created Zip Spec      14 (20) '2.0'\n-535DC Created OS            00 (0) 'MS-DOS'\n-535DD Extract Zip Spec      14 (20) '2.0'\n-535DE Extract OS            00 (0) 'MS-DOS'\n-535DF General Purpose Flag  0000 (0)\n-535E1 Compression Method    0000 (0) 'Stored'\n-535E3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-535E7 CRC                   00000000 (0)\n-535EB Compressed Size       00000000 (0)\n-535EF Uncompressed Size     00000000 (0)\n-535F3 Filename Length       0016 (22)\n-535F5 Extra Length          0009 (9)\n-535F7 Comment Length        0000 (0)\n-535F9 Disk Start            0000 (0)\n-535FB Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-535FD Ext File Attributes   00000000 (0)\n-53601 Local Header Offset   00004B5E (19294)\n-53605 Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53605: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5361B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5361D   Length              0005 (5)\n-5361F   Flags               01 (1) 'Modification'\n-53620   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53624 CENTRAL HEADER #21    02014B50 (33639248)\n-53628 Created Zip Spec      14 (20) '2.0'\n-53629 Created OS            00 (0) 'MS-DOS'\n-5362A Extract Zip Spec      14 (20) '2.0'\n-5362B Extract OS            00 (0) 'MS-DOS'\n-5362C General Purpose Flag  0000 (0)\n-5362E Compression Method    0000 (0) 'Stored'\n-53630 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53634 CRC                   00000000 (0)\n-53638 Compressed Size       00000000 (0)\n-5363C Uncompressed Size     00000000 (0)\n-53640 Filename Length       001E (30)\n-53642 Extra Length          0009 (9)\n-53644 Comment Length        0000 (0)\n-53646 Disk Start            0000 (0)\n-53648 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5364A Ext File Attributes   00000000 (0)\n-5364E Local Header Offset   00004B9B (19355)\n-53652 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53652: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53670 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53672   Length              0005 (5)\n-53674   Flags               01 (1) 'Modification'\n-53675   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53679 CENTRAL HEADER #22    02014B50 (33639248)\n-5367D Created Zip Spec      14 (20) '2.0'\n-5367E Created OS            00 (0) 'MS-DOS'\n-5367F Extract Zip Spec      14 (20) '2.0'\n-53680 Extract OS            00 (0) 'MS-DOS'\n-53681 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53683 Compression Method    0000 (0) 'Stored'\n-53685 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53689 CRC                   00900547 (9438535)\n-5368D Compressed Size       000003BF (959)\n-53691 Uncompressed Size     000003BF (959)\n-53695 Filename Length       002E (46)\n-53697 Extra Length          0009 (9)\n-53699 Comment Length        0000 (0)\n-5369B Disk Start            0000 (0)\n-5369D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5369F Ext File Attributes   00000000 (0)\n-536A3 Local Header Offset   00004BE0 (19424)\n-536A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x536A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-536D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-536D7   Length              0005 (5)\n-536D9   Flags               01 (1) 'Modification'\n-536DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-536DE CENTRAL HEADER #23    02014B50 (33639248)\n-536E2 Created Zip Spec      14 (20) '2.0'\n-536E3 Created OS            00 (0) 'MS-DOS'\n-536E4 Extract Zip Spec      14 (20) '2.0'\n-536E5 Extract OS            00 (0) 'MS-DOS'\n-536E6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-536E8 Compression Method    0000 (0) 'Stored'\n-536EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-536EE CRC                   C50B0632 (3305834034)\n-536F2 Compressed Size       000007AE (1966)\n-536F6 Uncompressed Size     000007AE (1966)\n-536FA Filename Length       0033 (51)\n-536FC Extra Length          0009 (9)\n-536FE Comment Length        0000 (0)\n-53700 Disk Start            0000 (0)\n-53702 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53704 Ext File Attributes   00000000 (0)\n-53708 Local Header Offset   00005004 (20484)\n-5370C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5370C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5373F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53741   Length              0005 (5)\n-53743   Flags               01 (1) 'Modification'\n-53744   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53748 CENTRAL HEADER #24    02014B50 (33639248)\n-5374C Created Zip Spec      14 (20) '2.0'\n-5374D Created OS            00 (0) 'MS-DOS'\n-5374E Extract Zip Spec      14 (20) '2.0'\n-5374F Extract OS            00 (0) 'MS-DOS'\n-53750 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53752 Compression Method    0000 (0) 'Stored'\n-53754 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53758 CRC                   C514DA82 (3306478210)\n-5375C Compressed Size       00000465 (1125)\n-53760 Uncompressed Size     00000465 (1125)\n-53764 Filename Length       0031 (49)\n-53766 Extra Length          0009 (9)\n-53768 Comment Length        0000 (0)\n-5376A Disk Start            0000 (0)\n-5376C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5376E Ext File Attributes   00000000 (0)\n-53772 Local Header Offset   0000581C (22556)\n-53776 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53776: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-537A7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537A9   Length              0005 (5)\n-537AB   Flags               01 (1) 'Modification'\n-537AC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537B0 CENTRAL HEADER #25    02014B50 (33639248)\n-537B4 Created Zip Spec      14 (20) '2.0'\n-537B5 Created OS            00 (0) 'MS-DOS'\n-537B6 Extract Zip Spec      14 (20) '2.0'\n-537B7 Extract OS            00 (0) 'MS-DOS'\n-537B8 General Purpose Flag  0000 (0)\n-537BA Compression Method    0000 (0) 'Stored'\n-537BC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537C0 CRC                   00000000 (0)\n-537C4 Compressed Size       00000000 (0)\n-537C8 Uncompressed Size     00000000 (0)\n-537CC Filename Length       0004 (4)\n-537CE Extra Length          0009 (9)\n-537D0 Comment Length        0000 (0)\n-537D2 Disk Start            0000 (0)\n-537D4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-537D6 Ext File Attributes   00000000 (0)\n-537DA Local Header Offset   00005CE9 (23785)\n-537DE Filename              'XXXX'\n-#\n-# WARNING: Offset 0x537DE: Filename 'XXXX'\n-#          Zero length filename\n-#\n-537E2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-537E4   Length              0005 (5)\n-537E6   Flags               01 (1) 'Modification'\n-537E7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-537EB CENTRAL HEADER #26    02014B50 (33639248)\n-537EF Created Zip Spec      14 (20) '2.0'\n-537F0 Created OS            00 (0) 'MS-DOS'\n-537F1 Extract Zip Spec      14 (20) '2.0'\n-537F2 Extract OS            00 (0) 'MS-DOS'\n-537F3 General Purpose Flag  0000 (0)\n-537F5 Compression Method    0000 (0) 'Stored'\n-537F7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-537FB CRC                   00000000 (0)\n-537FF Compressed Size       00000000 (0)\n-53803 Uncompressed Size     00000000 (0)\n-53807 Filename Length       000B (11)\n-53809 Extra Length          0009 (9)\n-5380B Comment Length        0000 (0)\n-5380D Disk Start            0000 (0)\n-5380F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53811 Ext File Attributes   00000000 (0)\n-53815 Local Header Offset   00005D14 (23828)\n-53819 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53819: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53824 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53826   Length              0005 (5)\n-53828   Flags               01 (1) 'Modification'\n-53829   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5382D CENTRAL HEADER #27    02014B50 (33639248)\n-53831 Created Zip Spec      14 (20) '2.0'\n-53832 Created OS            00 (0) 'MS-DOS'\n-53833 Extract Zip Spec      14 (20) '2.0'\n-53834 Extract OS            00 (0) 'MS-DOS'\n-53835 General Purpose Flag  0000 (0)\n-53837 Compression Method    0000 (0) 'Stored'\n-53839 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5383D CRC                   00000000 (0)\n-53841 Compressed Size       00000000 (0)\n-53845 Uncompressed Size     00000000 (0)\n-53849 Filename Length       0011 (17)\n-5384B Extra Length          0009 (9)\n-5384D Comment Length        0000 (0)\n-5384F Disk Start            0000 (0)\n-53851 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53853 Ext File Attributes   00000000 (0)\n-53857 Local Header Offset   00005D46 (23878)\n-5385B Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5385B: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5386C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5386E   Length              0005 (5)\n-53870   Flags               01 (1) 'Modification'\n-53871   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53875 CENTRAL HEADER #28    02014B50 (33639248)\n-53879 Created Zip Spec      14 (20) '2.0'\n-5387A Created OS            00 (0) 'MS-DOS'\n-5387B Extract Zip Spec      14 (20) '2.0'\n-5387C Extract OS            00 (0) 'MS-DOS'\n-5387D General Purpose Flag  0000 (0)\n-5387F Compression Method    0000 (0) 'Stored'\n-53881 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53885 CRC                   00000000 (0)\n-53889 Compressed Size       00000000 (0)\n-5388D Uncompressed Size     00000000 (0)\n-53891 Filename Length       0015 (21)\n-53893 Extra Length          0009 (9)\n-53895 Comment Length        0000 (0)\n-53897 Disk Start            0000 (0)\n-53899 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5389B Ext File Attributes   00000000 (0)\n-5389F Local Header Offset   00005D7E (23934)\n-538A3 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538A3: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-538B8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-538BA   Length              0005 (5)\n-538BC   Flags               01 (1) 'Modification'\n-538BD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-538C1 CENTRAL HEADER #29    02014B50 (33639248)\n-538C5 Created Zip Spec      14 (20) '2.0'\n-538C6 Created OS            00 (0) 'MS-DOS'\n-538C7 Extract Zip Spec      14 (20) '2.0'\n-538C8 Extract OS            00 (0) 'MS-DOS'\n-538C9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-538CB Compression Method    0000 (0) 'Stored'\n-538CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-538D1 CRC                   3836550F (943084815)\n-538D5 Compressed Size       00001E84 (7812)\n-538D9 Uncompressed Size     00001E84 (7812)\n-538DD Filename Length       0025 (37)\n-538DF Extra Length          0009 (9)\n-538E1 Comment Length        0000 (0)\n-538E3 Disk Start            0000 (0)\n-538E5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-538E7 Ext File Attributes   00000000 (0)\n-538EB Local Header Offset   00005DBA (23994)\n-538EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x538EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53914 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53916   Length              0005 (5)\n-53918   Flags               01 (1) 'Modification'\n-53919   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5391D CENTRAL HEADER #30    02014B50 (33639248)\n-53921 Created Zip Spec      14 (20) '2.0'\n-53922 Created OS            00 (0) 'MS-DOS'\n-53923 Extract Zip Spec      14 (20) '2.0'\n-53924 Extract OS            00 (0) 'MS-DOS'\n-53925 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53927 Compression Method    0000 (0) 'Stored'\n-53929 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5392D CRC                   16C36050 (381902928)\n-53931 Compressed Size       00000A30 (2608)\n-53935 Uncompressed Size     00000A30 (2608)\n-53939 Filename Length       0026 (38)\n-5393B Extra Length          0009 (9)\n-5393D Comment Length        0000 (0)\n-5393F Disk Start            0000 (0)\n-53941 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53943 Ext File Attributes   00000000 (0)\n-53947 Local Header Offset   00007C9A (31898)\n-5394B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5394B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53971 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53973   Length              0005 (5)\n-53975   Flags               01 (1) 'Modification'\n-53976   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5397A CENTRAL HEADER #31    02014B50 (33639248)\n-5397E Created Zip Spec      14 (20) '2.0'\n-5397F Created OS            00 (0) 'MS-DOS'\n-53980 Extract Zip Spec      14 (20) '2.0'\n-53981 Extract OS            00 (0) 'MS-DOS'\n-53982 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53984 Compression Method    0000 (0) 'Stored'\n-53986 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5398A CRC                   5C1C5F40 (1545363264)\n-5398E Compressed Size       00000A28 (2600)\n-53992 Uncompressed Size     00000A28 (2600)\n-53996 Filename Length       002A (42)\n-53998 Extra Length          0009 (9)\n-5399A Comment Length        0000 (0)\n-5399C Disk Start            0000 (0)\n-5399E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-539A0 Ext File Attributes   00000000 (0)\n-539A4 Local Header Offset   00008727 (34599)\n-539A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x539A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-539D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-539D4   Length              0005 (5)\n-539D6   Flags               01 (1) 'Modification'\n-539D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-539DB CENTRAL HEADER #32    02014B50 (33639248)\n-539DF Created Zip Spec      14 (20) '2.0'\n-539E0 Created OS            00 (0) 'MS-DOS'\n-539E1 Extract Zip Spec      14 (20) '2.0'\n-539E2 Extract OS            00 (0) 'MS-DOS'\n-539E3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-539E5 Compression Method    0000 (0) 'Stored'\n-539E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-539EB CRC                   93FCD4E8 (2482820328)\n-539EF Compressed Size       00003024 (12324)\n-539F3 Uncompressed Size     00003024 (12324)\n-539F7 Filename Length       0028 (40)\n-539F9 Extra Length          0009 (9)\n-539FB Comment Length        0000 (0)\n-539FD Disk Start            0000 (0)\n-539FF Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53A01 Ext File Attributes   00000000 (0)\n-53A05 Local Header Offset   000091B0 (37296)\n-53A09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A33   Length              0005 (5)\n-53A35   Flags               01 (1) 'Modification'\n-53A36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A3A CENTRAL HEADER #33    02014B50 (33639248)\n-53A3E Created Zip Spec      14 (20) '2.0'\n-53A3F Created OS            00 (0) 'MS-DOS'\n-53A40 Extract Zip Spec      14 (20) '2.0'\n-53A41 Extract OS            00 (0) 'MS-DOS'\n-53A42 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53A44 Compression Method    0000 (0) 'Stored'\n-53A46 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53A4A CRC                   735FA0B6 (1935646902)\n-53A4E Compressed Size       00000968 (2408)\n-53A52 Uncompressed Size     00000968 (2408)\n-53A56 Filename Length       002C (44)\n-53A58 Extra Length          0009 (9)\n-53A5A Comment Length        0000 (0)\n-53A5C Disk Start            0000 (0)\n-53A5E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53A60 Ext File Attributes   00000000 (0)\n-53A64 Local Header Offset   0000C233 (49715)\n-53A68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53A68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53A94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53A96   Length              0005 (5)\n-53A98   Flags               01 (1) 'Modification'\n-53A99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53A9D CENTRAL HEADER #34    02014B50 (33639248)\n-53AA1 Created Zip Spec      14 (20) '2.0'\n-53AA2 Created OS            00 (0) 'MS-DOS'\n-53AA3 Extract Zip Spec      14 (20) '2.0'\n-53AA4 Extract OS            00 (0) 'MS-DOS'\n-53AA5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53AA7 Compression Method    0000 (0) 'Stored'\n-53AA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53AAD CRC                   2AE2442E (719471662)\n-53AB1 Compressed Size       00000A18 (2584)\n-53AB5 Uncompressed Size     00000A18 (2584)\n-53AB9 Filename Length       0023 (35)\n-53ABB Extra Length          0009 (9)\n-53ABD Comment Length        0000 (0)\n-53ABF Disk Start            0000 (0)\n-53AC1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53AC3 Ext File Attributes   00000000 (0)\n-53AC7 Local Header Offset   0000CBFE (52222)\n-53ACB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53ACB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53AEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53AF0   Length              0005 (5)\n-53AF2   Flags               01 (1) 'Modification'\n-53AF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53AF7 CENTRAL HEADER #35    02014B50 (33639248)\n-53AFB Created Zip Spec      14 (20) '2.0'\n-53AFC Created OS            00 (0) 'MS-DOS'\n-53AFD Extract Zip Spec      14 (20) '2.0'\n-53AFE Extract OS            00 (0) 'MS-DOS'\n-53AFF General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53B01 Compression Method    0000 (0) 'Stored'\n-53B03 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B07 CRC                   525AF459 (1381692505)\n-53B0B Compressed Size       0000053F (1343)\n-53B0F Uncompressed Size     0000053F (1343)\n-53B13 Filename Length       0022 (34)\n-53B15 Extra Length          0009 (9)\n-53B17 Comment Length        0000 (0)\n-53B19 Disk Start            0000 (0)\n-53B1B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53B1D Ext File Attributes   00000000 (0)\n-53B21 Local Header Offset   0000D670 (54896)\n-53B25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53B47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53B49   Length              0005 (5)\n-53B4B   Flags               01 (1) 'Modification'\n-53B4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53B50 CENTRAL HEADER #36    02014B50 (33639248)\n-53B54 Created Zip Spec      14 (20) '2.0'\n-53B55 Created OS            00 (0) 'MS-DOS'\n-53B56 Extract Zip Spec      14 (20) '2.0'\n-53B57 Extract OS            00 (0) 'MS-DOS'\n-53B58 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53B5A Compression Method    0000 (0) 'Stored'\n-53B5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53B60 CRC                   FC32E707 (4231194375)\n-53B64 Compressed Size       000005AC (1452)\n-53B68 Uncompressed Size     000005AC (1452)\n-53B6C Filename Length       002A (42)\n-53B6E Extra Length          0009 (9)\n-53B70 Comment Length        0000 (0)\n-53B72 Disk Start            0000 (0)\n-53B74 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53B76 Ext File Attributes   00000000 (0)\n-53B7A Local Header Offset   0000DC08 (56328)\n-53B7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53B7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53BAA   Length              0005 (5)\n-53BAC   Flags               01 (1) 'Modification'\n-53BAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53BB1 CENTRAL HEADER #37    02014B50 (33639248)\n-53BB5 Created Zip Spec      14 (20) '2.0'\n-53BB6 Created OS            00 (0) 'MS-DOS'\n-53BB7 Extract Zip Spec      14 (20) '2.0'\n-53BB8 Extract OS            00 (0) 'MS-DOS'\n-53BB9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53BBB Compression Method    0000 (0) 'Stored'\n-53BBD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53BC1 CRC                   2EDA0DE9 (786042345)\n-53BC5 Compressed Size       00000965 (2405)\n-53BC9 Uncompressed Size     00000965 (2405)\n-53BCD Filename Length       0020 (32)\n-53BCF Extra Length          0009 (9)\n-53BD1 Comment Length        0000 (0)\n-53BD3 Disk Start            0000 (0)\n-53BD5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53BD7 Ext File Attributes   00000000 (0)\n-53BDB Local Header Offset   0000E215 (57877)\n-53BDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53BDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53BFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C01   Length              0005 (5)\n-53C03   Flags               01 (1) 'Modification'\n-53C04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C08 CENTRAL HEADER #38    02014B50 (33639248)\n-53C0C Created Zip Spec      14 (20) '2.0'\n-53C0D Created OS            00 (0) 'MS-DOS'\n-53C0E Extract Zip Spec      14 (20) '2.0'\n-53C0F Extract OS            00 (0) 'MS-DOS'\n-53C10 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53C12 Compression Method    0000 (0) 'Stored'\n-53C14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C18 CRC                   16263A19 (371603993)\n-53C1C Compressed Size       00000F7D (3965)\n-53C20 Uncompressed Size     00000F7D (3965)\n-53C24 Filename Length       0027 (39)\n-53C26 Extra Length          0009 (9)\n-53C28 Comment Length        0000 (0)\n-53C2A Disk Start            0000 (0)\n-53C2C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53C2E Ext File Attributes   00000000 (0)\n-53C32 Local Header Offset   0000EBD1 (60369)\n-53C36 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C36: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53C5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53C5F   Length              0005 (5)\n-53C61   Flags               01 (1) 'Modification'\n-53C62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53C66 CENTRAL HEADER #39    02014B50 (33639248)\n-53C6A Created Zip Spec      14 (20) '2.0'\n-53C6B Created OS            00 (0) 'MS-DOS'\n-53C6C Extract Zip Spec      14 (20) '2.0'\n-53C6D Extract OS            00 (0) 'MS-DOS'\n-53C6E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53C70 Compression Method    0000 (0) 'Stored'\n-53C72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53C76 CRC                   4A170C4C (1243024460)\n-53C7A Compressed Size       00000EA1 (3745)\n-53C7E Uncompressed Size     00000EA1 (3745)\n-53C82 Filename Length       0024 (36)\n-53C84 Extra Length          0009 (9)\n-53C86 Comment Length        0000 (0)\n-53C88 Disk Start            0000 (0)\n-53C8A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53C8C Ext File Attributes   00000000 (0)\n-53C90 Local Header Offset   0000FBAC (64428)\n-53C94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53C94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53CB8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53CBA   Length              0005 (5)\n-53CBC   Flags               01 (1) 'Modification'\n-53CBD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53CC1 CENTRAL HEADER #40    02014B50 (33639248)\n-53CC5 Created Zip Spec      14 (20) '2.0'\n-53CC6 Created OS            00 (0) 'MS-DOS'\n-53CC7 Extract Zip Spec      14 (20) '2.0'\n-53CC8 Extract OS            00 (0) 'MS-DOS'\n-53CC9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53CCB Compression Method    0000 (0) 'Stored'\n-53CCD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53CD1 CRC                   D1AB43CA (3517662154)\n-53CD5 Compressed Size       00000377 (887)\n-53CD9 Uncompressed Size     00000377 (887)\n-53CDD Filename Length       0024 (36)\n-53CDF Extra Length          0009 (9)\n-53CE1 Comment Length        0000 (0)\n-53CE3 Disk Start            0000 (0)\n-53CE5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53CE7 Ext File Attributes   00000000 (0)\n-53CEB Local Header Offset   00010AA8 (68264)\n-53CEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53CEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53D13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53D15   Length              0005 (5)\n-53D17   Flags               01 (1) 'Modification'\n-53D18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53D1C CENTRAL HEADER #41    02014B50 (33639248)\n-53D20 Created Zip Spec      14 (20) '2.0'\n-53D21 Created OS            00 (0) 'MS-DOS'\n-53D22 Extract Zip Spec      14 (20) '2.0'\n-53D23 Extract OS            00 (0) 'MS-DOS'\n-53D24 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53D26 Compression Method    0000 (0) 'Stored'\n-53D28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53D2C CRC                   19B4DE27 (431283751)\n-53D30 Compressed Size       000005D1 (1489)\n-53D34 Uncompressed Size     000005D1 (1489)\n-53D38 Filename Length       0021 (33)\n-53D3A Extra Length          0009 (9)\n-53D3C Comment Length        0000 (0)\n-53D3E Disk Start            0000 (0)\n-53D40 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53D42 Ext File Attributes   00000000 (0)\n-53D46 Local Header Offset   00010E7A (69242)\n-53D4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53D4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53D6B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53D6D   Length              0005 (5)\n-53D6F   Flags               01 (1) 'Modification'\n-53D70   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53D74 CENTRAL HEADER #42    02014B50 (33639248)\n-53D78 Created Zip Spec      14 (20) '2.0'\n-53D79 Created OS            00 (0) 'MS-DOS'\n-53D7A Extract Zip Spec      14 (20) '2.0'\n-53D7B Extract OS            00 (0) 'MS-DOS'\n-53D7C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53D7E Compression Method    0000 (0) 'Stored'\n-53D80 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53D84 CRC                   D82F1E47 (3626966599)\n-53D88 Compressed Size       0000059A (1434)\n-53D8C Uncompressed Size     0000059A (1434)\n-53D90 Filename Length       0029 (41)\n-53D92 Extra Length          0009 (9)\n-53D94 Comment Length        0000 (0)\n-53D96 Disk Start            0000 (0)\n-53D98 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53D9A Ext File Attributes   00000000 (0)\n-53D9E Local Header Offset   000114A3 (70819)\n-53DA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53DA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53DCB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53DCD   Length              0005 (5)\n-53DCF   Flags               01 (1) 'Modification'\n-53DD0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53DD4 CENTRAL HEADER #43    02014B50 (33639248)\n-53DD8 Created Zip Spec      14 (20) '2.0'\n-53DD9 Created OS            00 (0) 'MS-DOS'\n-53DDA Extract Zip Spec      14 (20) '2.0'\n-53DDB Extract OS            00 (0) 'MS-DOS'\n-53DDC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53DDE Compression Method    0000 (0) 'Stored'\n-53DE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53DE4 CRC                   2BFDB64A (738047562)\n-53DE8 Compressed Size       000007D0 (2000)\n-53DEC Uncompressed Size     000007D0 (2000)\n-53DF0 Filename Length       002A (42)\n-53DF2 Extra Length          0009 (9)\n-53DF4 Comment Length        0000 (0)\n-53DF6 Disk Start            0000 (0)\n-53DF8 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53DFA Ext File Attributes   00000000 (0)\n-53DFE Local Header Offset   00011A9D (72349)\n-53E02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53E02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53E2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53E2E   Length              0005 (5)\n-53E30   Flags               01 (1) 'Modification'\n-53E31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53E35 CENTRAL HEADER #44    02014B50 (33639248)\n-53E39 Created Zip Spec      14 (20) '2.0'\n-53E3A Created OS            00 (0) 'MS-DOS'\n-53E3B Extract Zip Spec      14 (20) '2.0'\n-53E3C Extract OS            00 (0) 'MS-DOS'\n-53E3D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53E3F Compression Method    0000 (0) 'Stored'\n-53E41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53E45 CRC                   CCB43BAA (3434363818)\n-53E49 Compressed Size       00000DF0 (3568)\n-53E4D Uncompressed Size     00000DF0 (3568)\n-53E51 Filename Length       0022 (34)\n-53E53 Extra Length          0009 (9)\n-53E55 Comment Length        0000 (0)\n-53E57 Disk Start            0000 (0)\n-53E59 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53E5B Ext File Attributes   00000000 (0)\n-53E5F Local Header Offset   000122CE (74446)\n-53E63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53E63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53E85 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53E87   Length              0005 (5)\n-53E89   Flags               01 (1) 'Modification'\n-53E8A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53E8E CENTRAL HEADER #45    02014B50 (33639248)\n-53E92 Created Zip Spec      14 (20) '2.0'\n-53E93 Created OS            00 (0) 'MS-DOS'\n-53E94 Extract Zip Spec      14 (20) '2.0'\n-53E95 Extract OS            00 (0) 'MS-DOS'\n-53E96 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53E98 Compression Method    0000 (0) 'Stored'\n-53E9A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53E9E CRC                   0D33E2B2 (221504178)\n-53EA2 Compressed Size       000005CC (1484)\n-53EA6 Uncompressed Size     000005CC (1484)\n-53EAA Filename Length       0028 (40)\n-53EAC Extra Length          0009 (9)\n-53EAE Comment Length        0000 (0)\n-53EB0 Disk Start            0000 (0)\n-53EB2 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53EB4 Ext File Attributes   00000000 (0)\n-53EB8 Local Header Offset   00013117 (78103)\n-53EBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53EBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53EE4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53EE6   Length              0005 (5)\n-53EE8   Flags               01 (1) 'Modification'\n-53EE9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53EED CENTRAL HEADER #46    02014B50 (33639248)\n-53EF1 Created Zip Spec      14 (20) '2.0'\n-53EF2 Created OS            00 (0) 'MS-DOS'\n-53EF3 Extract Zip Spec      14 (20) '2.0'\n-53EF4 Extract OS            00 (0) 'MS-DOS'\n-53EF5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53EF7 Compression Method    0000 (0) 'Stored'\n-53EF9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53EFD CRC                   319BF765 (832304997)\n-53F01 Compressed Size       000006DD (1757)\n-53F05 Uncompressed Size     000006DD (1757)\n-53F09 Filename Length       0026 (38)\n-53F0B Extra Length          0009 (9)\n-53F0D Comment Length        0000 (0)\n-53F0F Disk Start            0000 (0)\n-53F11 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53F13 Ext File Attributes   00000000 (0)\n-53F17 Local Header Offset   00013742 (79682)\n-53F1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53F1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53F41 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53F43   Length              0005 (5)\n-53F45   Flags               01 (1) 'Modification'\n-53F46   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53F4A CENTRAL HEADER #47    02014B50 (33639248)\n-53F4E Created Zip Spec      14 (20) '2.0'\n-53F4F Created OS            00 (0) 'MS-DOS'\n-53F50 Extract Zip Spec      14 (20) '2.0'\n-53F51 Extract OS            00 (0) 'MS-DOS'\n-53F52 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53F54 Compression Method    0000 (0) 'Stored'\n-53F56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53F5A CRC                   7799251E (2006525214)\n-53F5E Compressed Size       00001541 (5441)\n-53F62 Uncompressed Size     00001541 (5441)\n-53F66 Filename Length       0020 (32)\n-53F68 Extra Length          0009 (9)\n-53F6A Comment Length        0000 (0)\n-53F6C Disk Start            0000 (0)\n-53F6E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53F70 Ext File Attributes   00000000 (0)\n-53F74 Local Header Offset   00013E7C (81532)\n-53F78 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53F78: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53F98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53F9A   Length              0005 (5)\n-53F9C   Flags               01 (1) 'Modification'\n-53F9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53FA1 CENTRAL HEADER #48    02014B50 (33639248)\n-53FA5 Created Zip Spec      14 (20) '2.0'\n-53FA6 Created OS            00 (0) 'MS-DOS'\n-53FA7 Extract Zip Spec      14 (20) '2.0'\n-53FA8 Extract OS            00 (0) 'MS-DOS'\n-53FA9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-53FAB Compression Method    0000 (0) 'Stored'\n-53FAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-53FB1 CRC                   3BFD1345 (1006441285)\n-53FB5 Compressed Size       0000059E (1438)\n-53FB9 Uncompressed Size     0000059E (1438)\n-53FBD Filename Length       0026 (38)\n-53FBF Extra Length          0009 (9)\n-53FC1 Comment Length        0000 (0)\n-53FC3 Disk Start            0000 (0)\n-53FC5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-53FC7 Ext File Attributes   00000000 (0)\n-53FCB Local Header Offset   00015414 (87060)\n-53FCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x53FCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-53FF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-53FF7   Length              0005 (5)\n-53FF9   Flags               01 (1) 'Modification'\n-53FFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-53FFE CENTRAL HEADER #49    02014B50 (33639248)\n-54002 Created Zip Spec      14 (20) '2.0'\n-54003 Created OS            00 (0) 'MS-DOS'\n-54004 Extract Zip Spec      14 (20) '2.0'\n-54005 Extract OS            00 (0) 'MS-DOS'\n-54006 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54008 Compression Method    0000 (0) 'Stored'\n-5400A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5400E CRC                   8B2B5BC6 (2334874566)\n-54012 Compressed Size       00005703 (22275)\n-54016 Uncompressed Size     00005703 (22275)\n-5401A Filename Length       0024 (36)\n-5401C Extra Length          0009 (9)\n-5401E Comment Length        0000 (0)\n-54020 Disk Start            0000 (0)\n-54022 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54024 Ext File Attributes   00000000 (0)\n-54028 Local Header Offset   00015A0F (88591)\n-5402C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5402C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54050 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54052   Length              0005 (5)\n-54054   Flags               01 (1) 'Modification'\n-54055   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54059 CENTRAL HEADER #50    02014B50 (33639248)\n-5405D Created Zip Spec      14 (20) '2.0'\n-5405E Created OS            00 (0) 'MS-DOS'\n-5405F Extract Zip Spec      14 (20) '2.0'\n-54060 Extract OS            00 (0) 'MS-DOS'\n-54061 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54063 Compression Method    0000 (0) 'Stored'\n-54065 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54069 CRC                   D96AD9D5 (3647658453)\n-5406D Compressed Size       00000D23 (3363)\n-54071 Uncompressed Size     00000D23 (3363)\n-54075 Filename Length       0026 (38)\n-54077 Extra Length          0009 (9)\n-54079 Comment Length        0000 (0)\n-5407B Disk Start            0000 (0)\n-5407D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5407F Ext File Attributes   00000000 (0)\n-54083 Local Header Offset   0001B16D (110957)\n-54087 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54087: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-540AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-540AF   Length              0005 (5)\n-540B1   Flags               01 (1) 'Modification'\n-540B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-540B6 CENTRAL HEADER #51    02014B50 (33639248)\n-540BA Created Zip Spec      14 (20) '2.0'\n-540BB Created OS            00 (0) 'MS-DOS'\n-540BC Extract Zip Spec      14 (20) '2.0'\n-540BD Extract OS            00 (0) 'MS-DOS'\n-540BE General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-540C0 Compression Method    0000 (0) 'Stored'\n-540C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-540C6 CRC                   7D1A8DDF (2098892255)\n-540CA Compressed Size       00003A8A (14986)\n-540CE Uncompressed Size     00003A8A (14986)\n-540D2 Filename Length       0027 (39)\n-540D4 Extra Length          0009 (9)\n-540D6 Comment Length        0000 (0)\n-540D8 Disk Start            0000 (0)\n-540DA Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-540DC Ext File Attributes   00000000 (0)\n-540E0 Local Header Offset   0001BEED (114413)\n-540E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x540E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5410B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5410D   Length              0005 (5)\n-5410F   Flags               01 (1) 'Modification'\n-54110   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54114 CENTRAL HEADER #52    02014B50 (33639248)\n-54118 Created Zip Spec      14 (20) '2.0'\n-54119 Created OS            00 (0) 'MS-DOS'\n-5411A Extract Zip Spec      14 (20) '2.0'\n-5411B Extract OS            00 (0) 'MS-DOS'\n-5411C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5411E Compression Method    0000 (0) 'Stored'\n-54120 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54124 CRC                   B577D739 (3044529977)\n-54128 Compressed Size       0000218E (8590)\n-5412C Uncompressed Size     0000218E (8590)\n-54130 Filename Length       0023 (35)\n-54132 Extra Length          0009 (9)\n-54134 Comment Length        0000 (0)\n-54136 Disk Start            0000 (0)\n-54138 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5413A Ext File Attributes   00000000 (0)\n-5413E Local Header Offset   0001F9D5 (129493)\n-54142 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54142: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54165 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54167   Length              0005 (5)\n-54169   Flags               01 (1) 'Modification'\n-5416A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5416E CENTRAL HEADER #53    02014B50 (33639248)\n-54172 Created Zip Spec      14 (20) '2.0'\n-54173 Created OS            00 (0) 'MS-DOS'\n-54174 Extract Zip Spec      14 (20) '2.0'\n-54175 Extract OS            00 (0) 'MS-DOS'\n-54176 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54178 Compression Method    0000 (0) 'Stored'\n-5417A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5417E CRC                   1894D2EA (412406506)\n-54182 Compressed Size       00000B60 (2912)\n-54186 Uncompressed Size     00000B60 (2912)\n-5418A Filename Length       002A (42)\n-5418C Extra Length          0009 (9)\n-5418E Comment Length        0000 (0)\n-54190 Disk Start            0000 (0)\n-54192 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54194 Ext File Attributes   00000000 (0)\n-54198 Local Header Offset   00021BBD (138173)\n-5419C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5419C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-541C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-541C8   Length              0005 (5)\n-541CA   Flags               01 (1) 'Modification'\n-541CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-541CF CENTRAL HEADER #54    02014B50 (33639248)\n-541D3 Created Zip Spec      14 (20) '2.0'\n-541D4 Created OS            00 (0) 'MS-DOS'\n-541D5 Extract Zip Spec      14 (20) '2.0'\n-541D6 Extract OS            00 (0) 'MS-DOS'\n-541D7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-541D9 Compression Method    0000 (0) 'Stored'\n-541DB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-541DF CRC                   4977D9A5 (1232591269)\n-541E3 Compressed Size       000004A5 (1189)\n-541E7 Uncompressed Size     000004A5 (1189)\n-541EB Filename Length       0026 (38)\n-541ED Extra Length          0009 (9)\n-541EF Comment Length        0000 (0)\n-541F1 Disk Start            0000 (0)\n-541F3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-541F5 Ext File Attributes   00000000 (0)\n-541F9 Local Header Offset   0002277E (141182)\n-541FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x541FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54223 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54225   Length              0005 (5)\n-54227   Flags               01 (1) 'Modification'\n-54228   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5422C CENTRAL HEADER #55    02014B50 (33639248)\n-54230 Created Zip Spec      14 (20) '2.0'\n-54231 Created OS            00 (0) 'MS-DOS'\n-54232 Extract Zip Spec      14 (20) '2.0'\n-54233 Extract OS            00 (0) 'MS-DOS'\n-54234 General Purpose Flag  0000 (0)\n-54236 Compression Method    0000 (0) 'Stored'\n-54238 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5423C CRC                   00000000 (0)\n-54240 Compressed Size       00000000 (0)\n-54244 Uncompressed Size     00000000 (0)\n-54248 Filename Length       001C (28)\n-5424A Extra Length          0009 (9)\n-5424C Comment Length        0000 (0)\n-5424E Disk Start            0000 (0)\n-54250 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54252 Ext File Attributes   00000000 (0)\n-54256 Local Header Offset   00022C80 (142464)\n-5425A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5425A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54276 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54278   Length              0005 (5)\n-5427A   Flags               01 (1) 'Modification'\n-5427B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5427F CENTRAL HEADER #56    02014B50 (33639248)\n-54283 Created Zip Spec      14 (20) '2.0'\n-54284 Created OS            00 (0) 'MS-DOS'\n-54285 Extract Zip Spec      14 (20) '2.0'\n-54286 Extract OS            00 (0) 'MS-DOS'\n-54287 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54289 Compression Method    0000 (0) 'Stored'\n-5428B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5428F CRC                   300456E0 (805590752)\n-54293 Compressed Size       00001D9B (7579)\n-54297 Uncompressed Size     00001D9B (7579)\n-5429B Filename Length       0030 (48)\n-5429D Extra Length          0009 (9)\n-5429F Comment Length        0000 (0)\n-542A1 Disk Start            0000 (0)\n-542A3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-542A5 Ext File Attributes   00000000 (0)\n-542A9 Local Header Offset   00022CC3 (142531)\n-542AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x542AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-542DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-542DF   Length              0005 (5)\n-542E1   Flags               01 (1) 'Modification'\n-542E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-542E6 CENTRAL HEADER #57    02014B50 (33639248)\n-542EA Created Zip Spec      14 (20) '2.0'\n-542EB Created OS            00 (0) 'MS-DOS'\n-542EC Extract Zip Spec      14 (20) '2.0'\n-542ED Extract OS            00 (0) 'MS-DOS'\n-542EE General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-542F0 Compression Method    0000 (0) 'Stored'\n-542F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-542F6 CRC                   B52DE397 (3039683479)\n-542FA Compressed Size       00001623 (5667)\n-542FE Uncompressed Size     00001623 (5667)\n-54302 Filename Length       0032 (50)\n-54304 Extra Length          0009 (9)\n-54306 Comment Length        0000 (0)\n-54308 Disk Start            0000 (0)\n-5430A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5430C Ext File Attributes   00000000 (0)\n-54310 Local Header Offset   00024AC5 (150213)\n-54314 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54314: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54346 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54348   Length              0005 (5)\n-5434A   Flags               01 (1) 'Modification'\n-5434B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5434F CENTRAL HEADER #58    02014B50 (33639248)\n-54353 Created Zip Spec      14 (20) '2.0'\n-54354 Created OS            00 (0) 'MS-DOS'\n-54355 Extract Zip Spec      14 (20) '2.0'\n-54356 Extract OS            00 (0) 'MS-DOS'\n-54357 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54359 Compression Method    0000 (0) 'Stored'\n-5435B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5435F CRC                   851F3F00 (2233417472)\n-54363 Compressed Size       00000723 (1827)\n-54367 Uncompressed Size     00000723 (1827)\n-5436B Filename Length       0032 (50)\n-5436D Extra Length          0009 (9)\n-5436F Comment Length        0000 (0)\n-54371 Disk Start            0000 (0)\n-54373 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54375 Ext File Attributes   00000000 (0)\n-54379 Local Header Offset   00026151 (155985)\n-5437D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5437D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-543AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-543B1   Length              0005 (5)\n-543B3   Flags               01 (1) 'Modification'\n-543B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-543B8 CENTRAL HEADER #59    02014B50 (33639248)\n-543BC Created Zip Spec      14 (20) '2.0'\n-543BD Created OS            00 (0) 'MS-DOS'\n-543BE Extract Zip Spec      14 (20) '2.0'\n-543BF Extract OS            00 (0) 'MS-DOS'\n-543C0 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-543C2 Compression Method    0000 (0) 'Stored'\n-543C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-543C8 CRC                   86FDBE3E (2264776254)\n-543CC Compressed Size       00000FB9 (4025)\n-543D0 Uncompressed Size     00000FB9 (4025)\n-543D4 Filename Length       0031 (49)\n-543D6 Extra Length          0009 (9)\n-543D8 Comment Length        0000 (0)\n-543DA Disk Start            0000 (0)\n-543DC Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-543DE Ext File Attributes   00000000 (0)\n-543E2 Local Header Offset   000268DD (157917)\n-543E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x543E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54417 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54419   Length              0005 (5)\n-5441B   Flags               01 (1) 'Modification'\n-5441C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54420 CENTRAL HEADER #60    02014B50 (33639248)\n-54424 Created Zip Spec      14 (20) '2.0'\n-54425 Created OS            00 (0) 'MS-DOS'\n-54426 Extract Zip Spec      14 (20) '2.0'\n-54427 Extract OS            00 (0) 'MS-DOS'\n-54428 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5442A Compression Method    0000 (0) 'Stored'\n-5442C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54430 CRC                   A0F5CB6A (2700462954)\n-54434 Compressed Size       00000D48 (3400)\n-54438 Uncompressed Size     00000D48 (3400)\n-5443C Filename Length       0036 (54)\n-5443E Extra Length          0009 (9)\n-54440 Comment Length        0000 (0)\n-54442 Disk Start            0000 (0)\n-54444 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54446 Ext File Attributes   00000000 (0)\n-5444A Local Header Offset   000278FE (162046)\n-5444E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5444E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54484 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54486   Length              0005 (5)\n-54488   Flags               01 (1) 'Modification'\n-54489   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5448D CENTRAL HEADER #61    02014B50 (33639248)\n-54491 Created Zip Spec      14 (20) '2.0'\n-54492 Created OS            00 (0) 'MS-DOS'\n-54493 Extract Zip Spec      14 (20) '2.0'\n-54494 Extract OS            00 (0) 'MS-DOS'\n-54495 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54497 Compression Method    0000 (0) 'Stored'\n-54499 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5449D CRC                   38AEBD8D (950975885)\n-544A1 Compressed Size       00001838 (6200)\n-544A5 Uncompressed Size     00001838 (6200)\n-544A9 Filename Length       002E (46)\n-544AB Extra Length          0009 (9)\n-544AD Comment Length        0000 (0)\n-544AF Disk Start            0000 (0)\n-544B1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-544B3 Ext File Attributes   00000000 (0)\n-544B7 Local Header Offset   000286B3 (165555)\n-544BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x544BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-544E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-544EB   Length              0005 (5)\n-544ED   Flags               01 (1) 'Modification'\n-544EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-544F2 CENTRAL HEADER #62    02014B50 (33639248)\n-544F6 Created Zip Spec      14 (20) '2.0'\n-544F7 Created OS            00 (0) 'MS-DOS'\n-544F8 Extract Zip Spec      14 (20) '2.0'\n-544F9 Extract OS            00 (0) 'MS-DOS'\n-544FA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-544FC Compression Method    0000 (0) 'Stored'\n-544FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54502 CRC                   5D6B9E17 (1567333911)\n-54506 Compressed Size       00000CC3 (3267)\n-5450A Uncompressed Size     00000CC3 (3267)\n-5450E Filename Length       0031 (49)\n-54510 Extra Length          0009 (9)\n-54512 Comment Length        0000 (0)\n-54514 Disk Start            0000 (0)\n-54516 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54518 Ext File Attributes   00000000 (0)\n-5451C Local Header Offset   00029F50 (171856)\n-54520 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54520: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54551 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54553   Length              0005 (5)\n-54555   Flags               01 (1) 'Modification'\n-54556   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5455A CENTRAL HEADER #63    02014B50 (33639248)\n-5455E Created Zip Spec      14 (20) '2.0'\n-5455F Created OS            00 (0) 'MS-DOS'\n-54560 Extract Zip Spec      14 (20) '2.0'\n-54561 Extract OS            00 (0) 'MS-DOS'\n-54562 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54564 Compression Method    0000 (0) 'Stored'\n-54566 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5456A CRC                   33E95645 (870929989)\n-5456E Compressed Size       0000073C (1852)\n-54572 Uncompressed Size     0000073C (1852)\n-54576 Filename Length       002B (43)\n-54578 Extra Length          0009 (9)\n-5457A Comment Length        0000 (0)\n-5457C Disk Start            0000 (0)\n-5457E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54580 Ext File Attributes   00000000 (0)\n-54584 Local Header Offset   0002AC7B (175227)\n-54588 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54588: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-545B3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-545B5   Length              0005 (5)\n-545B7   Flags               01 (1) 'Modification'\n-545B8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-545BC CENTRAL HEADER #64    02014B50 (33639248)\n-545C0 Created Zip Spec      14 (20) '2.0'\n-545C1 Created OS            00 (0) 'MS-DOS'\n-545C2 Extract Zip Spec      14 (20) '2.0'\n-545C3 Extract OS            00 (0) 'MS-DOS'\n-545C4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-545C6 Compression Method    0000 (0) 'Stored'\n-545C8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-545CC CRC                   DF14BD96 (3742678422)\n-545D0 Compressed Size       000016A6 (5798)\n-545D4 Uncompressed Size     000016A6 (5798)\n-545D8 Filename Length       0030 (48)\n-545DA Extra Length          0009 (9)\n-545DC Comment Length        0000 (0)\n-545DE Disk Start            0000 (0)\n-545E0 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-545E2 Ext File Attributes   00000000 (0)\n-545E6 Local Header Offset   0002B419 (177177)\n-545EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x545EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5461A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5461C   Length              0005 (5)\n-5461E   Flags               01 (1) 'Modification'\n-5461F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54623 CENTRAL HEADER #65    02014B50 (33639248)\n-54627 Created Zip Spec      14 (20) '2.0'\n-54628 Created OS            00 (0) 'MS-DOS'\n-54629 Extract Zip Spec      14 (20) '2.0'\n-5462A Extract OS            00 (0) 'MS-DOS'\n-5462B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5462D Compression Method    0000 (0) 'Stored'\n-5462F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54633 CRC                   FA17120C (4195815948)\n-54637 Compressed Size       00000EE2 (3810)\n-5463B Uncompressed Size     00000EE2 (3810)\n-5463F Filename Length       0033 (51)\n-54641 Extra Length          0009 (9)\n-54643 Comment Length        0000 (0)\n-54645 Disk Start            0000 (0)\n-54647 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54649 Ext File Attributes   00000000 (0)\n-5464D Local Header Offset   0002CB26 (183078)\n-54651 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54651: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54684 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54686   Length              0005 (5)\n-54688   Flags               01 (1) 'Modification'\n-54689   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5468D CENTRAL HEADER #66    02014B50 (33639248)\n-54691 Created Zip Spec      14 (20) '2.0'\n-54692 Created OS            00 (0) 'MS-DOS'\n-54693 Extract Zip Spec      14 (20) '2.0'\n-54694 Extract OS            00 (0) 'MS-DOS'\n-54695 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54697 Compression Method    0000 (0) 'Stored'\n-54699 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5469D CRC                   BCD228F3 (3167889651)\n-546A1 Compressed Size       0000334E (13134)\n-546A5 Uncompressed Size     0000334E (13134)\n-546A9 Filename Length       002E (46)\n-546AB Extra Length          0009 (9)\n-546AD Comment Length        0000 (0)\n-546AF Disk Start            0000 (0)\n-546B1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-546B3 Ext File Attributes   00000000 (0)\n-546B7 Local Header Offset   0002DA72 (186994)\n-546BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x546BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-546E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-546EB   Length              0005 (5)\n-546ED   Flags               01 (1) 'Modification'\n-546EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-546F2 CENTRAL HEADER #67    02014B50 (33639248)\n-546F6 Created Zip Spec      14 (20) '2.0'\n-546F7 Created OS            00 (0) 'MS-DOS'\n-546F8 Extract Zip Spec      14 (20) '2.0'\n-546F9 Extract OS            00 (0) 'MS-DOS'\n-546FA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-546FC Compression Method    0000 (0) 'Stored'\n-546FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54702 CRC                   BDC74FB9 (3183955897)\n-54706 Compressed Size       00002C1E (11294)\n-5470A Uncompressed Size     00002C1E (11294)\n-5470E Filename Length       0032 (50)\n-54710 Extra Length          0009 (9)\n-54712 Comment Length        0000 (0)\n-54714 Disk Start            0000 (0)\n-54716 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54718 Ext File Attributes   00000000 (0)\n-5471C Local Header Offset   00030E25 (200229)\n-54720 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54720: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54752 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54754   Length              0005 (5)\n-54756   Flags               01 (1) 'Modification'\n-54757   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5475B CENTRAL HEADER #68    02014B50 (33639248)\n-5475F Created Zip Spec      14 (20) '2.0'\n-54760 Created OS            00 (0) 'MS-DOS'\n-54761 Extract Zip Spec      14 (20) '2.0'\n-54762 Extract OS            00 (0) 'MS-DOS'\n-54763 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54765 Compression Method    0000 (0) 'Stored'\n-54767 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5476B CRC                   4BE7E92F (1273489711)\n-5476F Compressed Size       00000B3B (2875)\n-54773 Uncompressed Size     00000B3B (2875)\n-54777 Filename Length       002E (46)\n-54779 Extra Length          0009 (9)\n-5477B Comment Length        0000 (0)\n-5477D Disk Start            0000 (0)\n-5477F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54781 Ext File Attributes   00000000 (0)\n-54785 Local Header Offset   00033AAC (211628)\n-54789 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54789: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-547B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-547B9   Length              0005 (5)\n-547BB   Flags               01 (1) 'Modification'\n-547BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-547C0 CENTRAL HEADER #69    02014B50 (33639248)\n-547C4 Created Zip Spec      14 (20) '2.0'\n-547C5 Created OS            00 (0) 'MS-DOS'\n-547C6 Extract Zip Spec      14 (20) '2.0'\n-547C7 Extract OS            00 (0) 'MS-DOS'\n-547C8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-547CA Compression Method    0000 (0) 'Stored'\n-547CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-547D0 CRC                   EE9BE4CE (4003194062)\n-547D4 Compressed Size       00000A15 (2581)\n-547D8 Uncompressed Size     00000A15 (2581)\n-547DC Filename Length       002C (44)\n-547DE Extra Length          0009 (9)\n-547E0 Comment Length        0000 (0)\n-547E2 Disk Start            0000 (0)\n-547E4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-547E6 Ext File Attributes   00000000 (0)\n-547EA Local Header Offset   0003464C (214604)\n-547EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x547EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5481A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5481C   Length              0005 (5)\n-5481E   Flags               01 (1) 'Modification'\n-5481F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54823 CENTRAL HEADER #70    02014B50 (33639248)\n-54827 Created Zip Spec      14 (20) '2.0'\n-54828 Created OS            00 (0) 'MS-DOS'\n-54829 Extract Zip Spec      14 (20) '2.0'\n-5482A Extract OS            00 (0) 'MS-DOS'\n-5482B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5482D Compression Method    0000 (0) 'Stored'\n-5482F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54833 CRC                   24C74556 (617039190)\n-54837 Compressed Size       00000A01 (2561)\n-5483B Uncompressed Size     00000A01 (2561)\n-5483F Filename Length       002F (47)\n-54841 Extra Length          0009 (9)\n-54843 Comment Length        0000 (0)\n-54845 Disk Start            0000 (0)\n-54847 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54849 Ext File Attributes   00000000 (0)\n-5484D Local Header Offset   000350C4 (217284)\n-54851 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54851: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54880 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54882   Length              0005 (5)\n-54884   Flags               01 (1) 'Modification'\n-54885   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54889 CENTRAL HEADER #71    02014B50 (33639248)\n-5488D Created Zip Spec      14 (20) '2.0'\n-5488E Created OS            00 (0) 'MS-DOS'\n-5488F Extract Zip Spec      14 (20) '2.0'\n-54890 Extract OS            00 (0) 'MS-DOS'\n-54891 General Purpose Flag  0000 (0)\n-54893 Compression Method    0000 (0) 'Stored'\n-54895 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54899 CRC                   00000000 (0)\n-5489D Compressed Size       00000000 (0)\n-548A1 Uncompressed Size     00000000 (0)\n-548A5 Filename Length       0020 (32)\n-548A7 Extra Length          0009 (9)\n-548A9 Comment Length        0000 (0)\n-548AB Disk Start            0000 (0)\n-548AD Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-548AF Ext File Attributes   00000000 (0)\n-548B3 Local Header Offset   00035B2B (219947)\n-548B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x548B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-548D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-548D9   Length              0005 (5)\n-548DB   Flags               01 (1) 'Modification'\n-548DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-548E0 CENTRAL HEADER #72    02014B50 (33639248)\n-548E4 Created Zip Spec      14 (20) '2.0'\n-548E5 Created OS            00 (0) 'MS-DOS'\n-548E6 Extract Zip Spec      14 (20) '2.0'\n-548E7 Extract OS            00 (0) 'MS-DOS'\n-548E8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-548EA Compression Method    0000 (0) 'Stored'\n-548EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-548F0 CRC                   F1C552FF (4056240895)\n-548F4 Compressed Size       00000A9C (2716)\n-548F8 Uncompressed Size     00000A9C (2716)\n-548FC Filename Length       0036 (54)\n-548FE Extra Length          0009 (9)\n-54900 Comment Length        0000 (0)\n-54902 Disk Start            0000 (0)\n-54904 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54906 Ext File Attributes   00000000 (0)\n-5490A Local Header Offset   00035B72 (220018)\n-5490E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5490E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54944 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54946   Length              0005 (5)\n-54948   Flags               01 (1) 'Modification'\n-54949   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5494D CENTRAL HEADER #73    02014B50 (33639248)\n-54951 Created Zip Spec      14 (20) '2.0'\n-54952 Created OS            00 (0) 'MS-DOS'\n-54953 Extract Zip Spec      14 (20) '2.0'\n-54954 Extract OS            00 (0) 'MS-DOS'\n-54955 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54957 Compression Method    0000 (0) 'Stored'\n-54959 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5495D CRC                   0D540AED (223611629)\n-54961 Compressed Size       00000A14 (2580)\n-54965 Uncompressed Size     00000A14 (2580)\n-54969 Filename Length       002D (45)\n-5496B Extra Length          0009 (9)\n-5496D Comment Length        0000 (0)\n-5496F Disk Start            0000 (0)\n-54971 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54973 Ext File Attributes   00000000 (0)\n-54977 Local Header Offset   0003667B (222843)\n-5497B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5497B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-549A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-549AA   Length              0005 (5)\n-549AC   Flags               01 (1) 'Modification'\n-549AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-549B1 CENTRAL HEADER #74    02014B50 (33639248)\n-549B5 Created Zip Spec      14 (20) '2.0'\n-549B6 Created OS            00 (0) 'MS-DOS'\n-549B7 Extract Zip Spec      14 (20) '2.0'\n-549B8 Extract OS            00 (0) 'MS-DOS'\n-549B9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-549BB Compression Method    0000 (0) 'Stored'\n-549BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-549C1 CRC                   00E586BE (15042238)\n-549C5 Compressed Size       00000678 (1656)\n-549C9 Uncompressed Size     00000678 (1656)\n-549CD Filename Length       002F (47)\n-549CF Extra Length          0009 (9)\n-549D1 Comment Length        0000 (0)\n-549D3 Disk Start            0000 (0)\n-549D5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-549D7 Ext File Attributes   00000000 (0)\n-549DB Local Header Offset   000370F3 (225523)\n-549DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x549DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54A0E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54A10   Length              0005 (5)\n-54A12   Flags               01 (1) 'Modification'\n-54A13   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54A17 CENTRAL HEADER #75    02014B50 (33639248)\n-54A1B Created Zip Spec      14 (20) '2.0'\n-54A1C Created OS            00 (0) 'MS-DOS'\n-54A1D Extract Zip Spec      14 (20) '2.0'\n-54A1E Extract OS            00 (0) 'MS-DOS'\n-54A1F General Purpose Flag  0000 (0)\n-54A21 Compression Method    0000 (0) 'Stored'\n-54A23 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54A27 CRC                   00000000 (0)\n-54A2B Compressed Size       00000000 (0)\n-54A2F Uncompressed Size     00000000 (0)\n-54A33 Filename Length       001E (30)\n-54A35 Extra Length          0009 (9)\n-54A37 Comment Length        0000 (0)\n-54A39 Disk Start            0000 (0)\n-54A3B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54A3D Ext File Attributes   00000000 (0)\n-54A41 Local Header Offset   000377D1 (227281)\n-54A45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54A45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54A63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54A65   Length              0005 (5)\n-54A67   Flags               01 (1) 'Modification'\n-54A68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54A6C CENTRAL HEADER #76    02014B50 (33639248)\n-54A70 Created Zip Spec      14 (20) '2.0'\n-54A71 Created OS            00 (0) 'MS-DOS'\n-54A72 Extract Zip Spec      14 (20) '2.0'\n-54A73 Extract OS            00 (0) 'MS-DOS'\n-54A74 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54A76 Compression Method    0000 (0) 'Stored'\n-54A78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54A7C CRC                   E1C5881F (3787819039)\n-54A80 Compressed Size       000006AD (1709)\n-54A84 Uncompressed Size     000006AD (1709)\n-54A88 Filename Length       003C (60)\n-54A8A Extra Length          0009 (9)\n-54A8C Comment Length        0000 (0)\n-54A8E Disk Start            0000 (0)\n-54A90 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54A92 Ext File Attributes   00000000 (0)\n-54A96 Local Header Offset   00037816 (227350)\n-54A9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54A9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54AD6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54AD8   Length              0005 (5)\n-54ADA   Flags               01 (1) 'Modification'\n-54ADB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54ADF CENTRAL HEADER #77    02014B50 (33639248)\n-54AE3 Created Zip Spec      14 (20) '2.0'\n-54AE4 Created OS            00 (0) 'MS-DOS'\n-54AE5 Extract Zip Spec      14 (20) '2.0'\n-54AE6 Extract OS            00 (0) 'MS-DOS'\n-54AE7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54AE9 Compression Method    0000 (0) 'Stored'\n-54AEB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54AEF CRC                   FE9FE6BA (4271892154)\n-54AF3 Compressed Size       00000515 (1301)\n-54AF7 Uncompressed Size     00000515 (1301)\n-54AFB Filename Length       003A (58)\n-54AFD Extra Length          0009 (9)\n-54AFF Comment Length        0000 (0)\n-54B01 Disk Start            0000 (0)\n-54B03 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54B05 Ext File Attributes   00000000 (0)\n-54B09 Local Header Offset   00037F36 (229174)\n-54B0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54B0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54B47 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54B49   Length              0005 (5)\n-54B4B   Flags               01 (1) 'Modification'\n-54B4C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54B50 CENTRAL HEADER #78    02014B50 (33639248)\n-54B54 Created Zip Spec      14 (20) '2.0'\n-54B55 Created OS            00 (0) 'MS-DOS'\n-54B56 Extract Zip Spec      14 (20) '2.0'\n-54B57 Extract OS            00 (0) 'MS-DOS'\n-54B58 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54B5A Compression Method    0000 (0) 'Stored'\n-54B5C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54B60 CRC                   07F77085 (133656709)\n-54B64 Compressed Size       000004F7 (1271)\n-54B68 Uncompressed Size     000004F7 (1271)\n-54B6C Filename Length       0039 (57)\n-54B6E Extra Length          0009 (9)\n-54B70 Comment Length        0000 (0)\n-54B72 Disk Start            0000 (0)\n-54B74 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54B76 Ext File Attributes   00000000 (0)\n-54B7A Local Header Offset   000384BC (230588)\n-54B7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54B7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54BB7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54BB9   Length              0005 (5)\n-54BBB   Flags               01 (1) 'Modification'\n-54BBC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54BC0 CENTRAL HEADER #79    02014B50 (33639248)\n-54BC4 Created Zip Spec      14 (20) '2.0'\n-54BC5 Created OS            00 (0) 'MS-DOS'\n-54BC6 Extract Zip Spec      14 (20) '2.0'\n-54BC7 Extract OS            00 (0) 'MS-DOS'\n-54BC8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54BCA Compression Method    0000 (0) 'Stored'\n-54BCC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54BD0 CRC                   334FA791 (860858257)\n-54BD4 Compressed Size       00000C9A (3226)\n-54BD8 Uncompressed Size     00000C9A (3226)\n-54BDC Filename Length       003A (58)\n-54BDE Extra Length          0009 (9)\n-54BE0 Comment Length        0000 (0)\n-54BE2 Disk Start            0000 (0)\n-54BE4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54BE6 Ext File Attributes   00000000 (0)\n-54BEA Local Header Offset   00038A23 (231971)\n-54BEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54BEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54C28 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54C2A   Length              0005 (5)\n-54C2C   Flags               01 (1) 'Modification'\n-54C2D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54C31 CENTRAL HEADER #80    02014B50 (33639248)\n-54C35 Created Zip Spec      14 (20) '2.0'\n-54C36 Created OS            00 (0) 'MS-DOS'\n-54C37 Extract Zip Spec      14 (20) '2.0'\n-54C38 Extract OS            00 (0) 'MS-DOS'\n-54C39 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54C3B Compression Method    0000 (0) 'Stored'\n-54C3D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54C41 CRC                   5C26FEE4 (1546059492)\n-54C45 Compressed Size       00000D57 (3415)\n-54C49 Uncompressed Size     00000D57 (3415)\n-54C4D Filename Length       0039 (57)\n-54C4F Extra Length          0009 (9)\n-54C51 Comment Length        0000 (0)\n-54C53 Disk Start            0000 (0)\n-54C55 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54C57 Ext File Attributes   00000000 (0)\n-54C5B Local Header Offset   0003972E (235310)\n-54C5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54C5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54C98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54C9A   Length              0005 (5)\n-54C9C   Flags               01 (1) 'Modification'\n-54C9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54CA1 CENTRAL HEADER #81    02014B50 (33639248)\n-54CA5 Created Zip Spec      14 (20) '2.0'\n-54CA6 Created OS            00 (0) 'MS-DOS'\n-54CA7 Extract Zip Spec      14 (20) '2.0'\n-54CA8 Extract OS            00 (0) 'MS-DOS'\n-54CA9 General Purpose Flag  0000 (0)\n-54CAB Compression Method    0000 (0) 'Stored'\n-54CAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54CB1 CRC                   00000000 (0)\n-54CB5 Compressed Size       00000000 (0)\n-54CB9 Uncompressed Size     00000000 (0)\n-54CBD Filename Length       001E (30)\n-54CBF Extra Length          0009 (9)\n-54CC1 Comment Length        0000 (0)\n-54CC3 Disk Start            0000 (0)\n-54CC5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54CC7 Ext File Attributes   00000000 (0)\n-54CCB Local Header Offset   0003A4F5 (238837)\n-54CCF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54CCF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54CED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54CEF   Length              0005 (5)\n-54CF1   Flags               01 (1) 'Modification'\n-54CF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54CF6 CENTRAL HEADER #82    02014B50 (33639248)\n-54CFA Created Zip Spec      14 (20) '2.0'\n-54CFB Created OS            00 (0) 'MS-DOS'\n-54CFC Extract Zip Spec      14 (20) '2.0'\n-54CFD Extract OS            00 (0) 'MS-DOS'\n-54CFE General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54D00 Compression Method    0000 (0) 'Stored'\n-54D02 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54D06 CRC                   EC8B751D (3968562461)\n-54D0A Compressed Size       000008F6 (2294)\n-54D0E Uncompressed Size     000008F6 (2294)\n-54D12 Filename Length       0033 (51)\n-54D14 Extra Length          0009 (9)\n-54D16 Comment Length        0000 (0)\n-54D18 Disk Start            0000 (0)\n-54D1A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54D1C Ext File Attributes   00000000 (0)\n-54D20 Local Header Offset   0003A53A (238906)\n-54D24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54D24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54D57 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54D59   Length              0005 (5)\n-54D5B   Flags               01 (1) 'Modification'\n-54D5C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54D60 CENTRAL HEADER #83    02014B50 (33639248)\n-54D64 Created Zip Spec      14 (20) '2.0'\n-54D65 Created OS            00 (0) 'MS-DOS'\n-54D66 Extract Zip Spec      14 (20) '2.0'\n-54D67 Extract OS            00 (0) 'MS-DOS'\n-54D68 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54D6A Compression Method    0000 (0) 'Stored'\n-54D6C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54D70 CRC                   A5C33F03 (2781036291)\n-54D74 Compressed Size       00001F52 (8018)\n-54D78 Uncompressed Size     00001F52 (8018)\n-54D7C Filename Length       0032 (50)\n-54D7E Extra Length          0009 (9)\n-54D80 Comment Length        0000 (0)\n-54D82 Disk Start            0000 (0)\n-54D84 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54D86 Ext File Attributes   00000000 (0)\n-54D8A Local Header Offset   0003AE9A (241306)\n-54D8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54D8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54DC0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54DC2   Length              0005 (5)\n-54DC4   Flags               01 (1) 'Modification'\n-54DC5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54DC9 CENTRAL HEADER #84    02014B50 (33639248)\n-54DCD Created Zip Spec      14 (20) '2.0'\n-54DCE Created OS            00 (0) 'MS-DOS'\n-54DCF Extract Zip Spec      14 (20) '2.0'\n-54DD0 Extract OS            00 (0) 'MS-DOS'\n-54DD1 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54DD3 Compression Method    0000 (0) 'Stored'\n-54DD5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54DD9 CRC                   861CA040 (2250022976)\n-54DDD Compressed Size       000010FE (4350)\n-54DE1 Uncompressed Size     000010FE (4350)\n-54DE5 Filename Length       0033 (51)\n-54DE7 Extra Length          0009 (9)\n-54DE9 Comment Length        0000 (0)\n-54DEB Disk Start            0000 (0)\n-54DED Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54DEF Ext File Attributes   00000000 (0)\n-54DF3 Local Header Offset   0003CE55 (249429)\n-54DF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54DF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54E2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54E2C   Length              0005 (5)\n-54E2E   Flags               01 (1) 'Modification'\n-54E2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54E33 CENTRAL HEADER #85    02014B50 (33639248)\n-54E37 Created Zip Spec      14 (20) '2.0'\n-54E38 Created OS            00 (0) 'MS-DOS'\n-54E39 Extract Zip Spec      14 (20) '2.0'\n-54E3A Extract OS            00 (0) 'MS-DOS'\n-54E3B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54E3D Compression Method    0000 (0) 'Stored'\n-54E3F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54E43 CRC                   1140D3D7 (289461207)\n-54E47 Compressed Size       000021E4 (8676)\n-54E4B Uncompressed Size     000021E4 (8676)\n-54E4F Filename Length       0038 (56)\n-54E51 Extra Length          0009 (9)\n-54E53 Comment Length        0000 (0)\n-54E55 Disk Start            0000 (0)\n-54E57 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54E59 Ext File Attributes   00000000 (0)\n-54E5D Local Header Offset   0003DFBD (253885)\n-54E61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54E61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54E99 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54E9B   Length              0005 (5)\n-54E9D   Flags               01 (1) 'Modification'\n-54E9E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54EA2 CENTRAL HEADER #86    02014B50 (33639248)\n-54EA6 Created Zip Spec      14 (20) '2.0'\n-54EA7 Created OS            00 (0) 'MS-DOS'\n-54EA8 Extract Zip Spec      14 (20) '2.0'\n-54EA9 Extract OS            00 (0) 'MS-DOS'\n-54EAA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54EAC Compression Method    0000 (0) 'Stored'\n-54EAE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54EB2 CRC                   90398B66 (2419690342)\n-54EB6 Compressed Size       00000F56 (3926)\n-54EBA Uncompressed Size     00000F56 (3926)\n-54EBE Filename Length       0035 (53)\n-54EC0 Extra Length          0009 (9)\n-54EC2 Comment Length        0000 (0)\n-54EC4 Disk Start            0000 (0)\n-54EC6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54EC8 Ext File Attributes   00000000 (0)\n-54ECC Local Header Offset   00040210 (262672)\n-54ED0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54ED0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54F05 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54F07   Length              0005 (5)\n-54F09   Flags               01 (1) 'Modification'\n-54F0A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54F0E CENTRAL HEADER #87    02014B50 (33639248)\n-54F12 Created Zip Spec      14 (20) '2.0'\n-54F13 Created OS            00 (0) 'MS-DOS'\n-54F14 Extract Zip Spec      14 (20) '2.0'\n-54F15 Extract OS            00 (0) 'MS-DOS'\n-54F16 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54F18 Compression Method    0000 (0) 'Stored'\n-54F1A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54F1E CRC                   8054E5B8 (2153047480)\n-54F22 Compressed Size       00000FA9 (4009)\n-54F26 Uncompressed Size     00000FA9 (4009)\n-54F2A Filename Length       002D (45)\n-54F2C Extra Length          0009 (9)\n-54F2E Comment Length        0000 (0)\n-54F30 Disk Start            0000 (0)\n-54F32 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54F34 Ext File Attributes   00000000 (0)\n-54F38 Local Header Offset   000411D2 (266706)\n-54F3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54F3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54F69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54F6B   Length              0005 (5)\n-54F6D   Flags               01 (1) 'Modification'\n-54F6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54F72 CENTRAL HEADER #88    02014B50 (33639248)\n-54F76 Created Zip Spec      14 (20) '2.0'\n-54F77 Created OS            00 (0) 'MS-DOS'\n-54F78 Extract Zip Spec      14 (20) '2.0'\n-54F79 Extract OS            00 (0) 'MS-DOS'\n-54F7A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54F7C Compression Method    0000 (0) 'Stored'\n-54F7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54F82 CRC                   873A5673 (2268747379)\n-54F86 Compressed Size       0000072D (1837)\n-54F8A Uncompressed Size     0000072D (1837)\n-54F8E Filename Length       0031 (49)\n-54F90 Extra Length          0009 (9)\n-54F92 Comment Length        0000 (0)\n-54F94 Disk Start            0000 (0)\n-54F96 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-54F98 Ext File Attributes   00000000 (0)\n-54F9C Local Header Offset   000421DF (270815)\n-54FA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x54FA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-54FD1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-54FD3   Length              0005 (5)\n-54FD5   Flags               01 (1) 'Modification'\n-54FD6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-54FDA CENTRAL HEADER #89    02014B50 (33639248)\n-54FDE Created Zip Spec      14 (20) '2.0'\n-54FDF Created OS            00 (0) 'MS-DOS'\n-54FE0 Extract Zip Spec      14 (20) '2.0'\n-54FE1 Extract OS            00 (0) 'MS-DOS'\n-54FE2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-54FE4 Compression Method    0000 (0) 'Stored'\n-54FE6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-54FEA CRC                   B63E72D7 (3057545943)\n-54FEE Compressed Size       00000D50 (3408)\n-54FF2 Uncompressed Size     00000D50 (3408)\n-54FF6 Filename Length       0038 (56)\n-54FF8 Extra Length          0009 (9)\n-54FFA Comment Length        0000 (0)\n-54FFC Disk Start            0000 (0)\n-54FFE Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-55000 Ext File Attributes   00000000 (0)\n-55004 Local Header Offset   00042974 (272756)\n-55008 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55008: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-55040 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-55042   Length              0005 (5)\n-55044   Flags               01 (1) 'Modification'\n-55045   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-55049 CENTRAL HEADER #90    02014B50 (33639248)\n-5504D Created Zip Spec      14 (20) '2.0'\n-5504E Created OS            00 (0) 'MS-DOS'\n-5504F Extract Zip Spec      14 (20) '2.0'\n-55050 Extract OS            00 (0) 'MS-DOS'\n-55051 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-55053 Compression Method    0000 (0) 'Stored'\n-55055 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-55059 CRC                   C40EC84E (3289303118)\n-5505D Compressed Size       00000D18 (3352)\n-55061 Uncompressed Size     00000D18 (3352)\n-55065 Filename Length       003A (58)\n-55067 Extra Length          0009 (9)\n-55069 Comment Length        0000 (0)\n-5506B Disk Start            0000 (0)\n-5506D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5506F Ext File Attributes   00000000 (0)\n-55073 Local Header Offset   00043733 (276275)\n-55077 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55077: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-550B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-550B3   Length              0005 (5)\n-550B5   Flags               01 (1) 'Modification'\n-550B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-550BA CENTRAL HEADER #91    02014B50 (33639248)\n-550BE Created Zip Spec      14 (20) '2.0'\n-550BF Created OS            00 (0) 'MS-DOS'\n-550C0 Extract Zip Spec      14 (20) '2.0'\n-550C1 Extract OS            00 (0) 'MS-DOS'\n-550C2 General Purpose Flag  0000 (0)\n-550C4 Compression Method    0000 (0) 'Stored'\n-550C6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-550CA CRC                   00000000 (0)\n-550CE Compressed Size       00000000 (0)\n-550D2 Uncompressed Size     00000000 (0)\n-550D6 Filename Length       0024 (36)\n-550D8 Extra Length          0009 (9)\n-550DA Comment Length        0000 (0)\n-550DC Disk Start            0000 (0)\n-550DE Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-550E0 Ext File Attributes   00000000 (0)\n-550E4 Local Header Offset   000444BC (279740)\n-550E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x550E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5510C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5510E   Length              0005 (5)\n-55110   Flags               01 (1) 'Modification'\n-55111   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-55115 CENTRAL HEADER #92    02014B50 (33639248)\n-55119 Created Zip Spec      14 (20) '2.0'\n-5511A Created OS            00 (0) 'MS-DOS'\n-5511B Extract Zip Spec      14 (20) '2.0'\n-5511C Extract OS            00 (0) 'MS-DOS'\n-5511D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5511F Compression Method    0000 (0) 'Stored'\n-55121 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-55125 CRC                   7D5510EE (2102726894)\n-55129 Compressed Size       00000DAE (3502)\n-5512D Uncompressed Size     00000DAE (3502)\n-55131 Filename Length       0036 (54)\n-55133 Extra Length          0009 (9)\n-55135 Comment Length        0000 (0)\n-55137 Disk Start            0000 (0)\n-55139 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5513B Ext File Attributes   00000000 (0)\n-5513F Local Header Offset   00044507 (279815)\n-55143 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55143: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-55179 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5517B   Length              0005 (5)\n-5517D   Flags               01 (1) 'Modification'\n-5517E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-55182 CENTRAL HEADER #93    02014B50 (33639248)\n-55186 Created Zip Spec      14 (20) '2.0'\n-55187 Created OS            00 (0) 'MS-DOS'\n-55188 Extract Zip Spec      14 (20) '2.0'\n-55189 Extract OS            00 (0) 'MS-DOS'\n-5518A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5518C Compression Method    0000 (0) 'Stored'\n-5518E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-55192 CRC                   FC4D9CC7 (4232944839)\n-55196 Compressed Size       00000409 (1033)\n-5519A Uncompressed Size     00000409 (1033)\n-5519E Filename Length       0035 (53)\n-551A0 Extra Length          0009 (9)\n-551A2 Comment Length        0000 (0)\n-551A4 Disk Start            0000 (0)\n-551A6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-551A8 Ext File Attributes   00000000 (0)\n-551AC Local Header Offset   00045322 (283426)\n-551B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x551B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-551E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-551E7   Length              0005 (5)\n-551E9   Flags               01 (1) 'Modification'\n-551EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-551EE CENTRAL HEADER #94    02014B50 (33639248)\n-551F2 Created Zip Spec      14 (20) '2.0'\n-551F3 Created OS            00 (0) 'MS-DOS'\n-551F4 Extract Zip Spec      14 (20) '2.0'\n-551F5 Extract OS            00 (0) 'MS-DOS'\n-551F6 General Purpose Flag  0000 (0)\n-551F8 Compression Method    0000 (0) 'Stored'\n-551FA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-551FE CRC                   00000000 (0)\n-55202 Compressed Size       00000000 (0)\n-55206 Uncompressed Size     00000000 (0)\n-5520A Filename Length       001B (27)\n-5520C Extra Length          0009 (9)\n-5520E Comment Length        0000 (0)\n-55210 Disk Start            0000 (0)\n-55212 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-55214 Ext File Attributes   00000000 (0)\n-55218 Local Header Offset   00045797 (284567)\n-5521C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5521C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-55237 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-55239   Length              0005 (5)\n-5523B   Flags               01 (1) 'Modification'\n-5523C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-55240 CENTRAL HEADER #95    02014B50 (33639248)\n-55244 Created Zip Spec      14 (20) '2.0'\n-55245 Created OS            00 (0) 'MS-DOS'\n-55246 Extract Zip Spec      14 (20) '2.0'\n-55247 Extract OS            00 (0) 'MS-DOS'\n-55248 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5524A Compression Method    0000 (0) 'Stored'\n-5524C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-55250 CRC                   E40DEA4B (3826117195)\n-55254 Compressed Size       00000CAE (3246)\n-55258 Uncompressed Size     00000CAE (3246)\n-5525C Filename Length       0034 (52)\n-5525E Extra Length          0009 (9)\n-55260 Comment Length        0000 (0)\n-55262 Disk Start            0000 (0)\n-55264 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-55266 Ext File Attributes   00000000 (0)\n-5526A Local Header Offset   000457D9 (284633)\n-5526E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5526E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-552A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-552A4   Length              0005 (5)\n-552A6   Flags               01 (1) 'Modification'\n-552A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-552AB CENTRAL HEADER #96    02014B50 (33639248)\n-552AF Created Zip Spec      14 (20) '2.0'\n-552B0 Created OS            00 (0) 'MS-DOS'\n-552B1 Extract Zip Spec      14 (20) '2.0'\n-552B2 Extract OS            00 (0) 'MS-DOS'\n-552B3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-552B5 Compression Method    0000 (0) 'Stored'\n-552B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-552BB CRC                   7B8AE3FF (2072699903)\n-552BF Compressed Size       000012F0 (4848)\n-552C3 Uncompressed Size     000012F0 (4848)\n-552C7 Filename Length       0034 (52)\n-552C9 Extra Length          0009 (9)\n-552CB Comment Length        0000 (0)\n-552CD Disk Start            0000 (0)\n-552CF Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-552D1 Ext File Attributes   00000000 (0)\n-552D5 Local Header Offset   000464F2 (287986)\n-552D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x552D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5530D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5530F   Length              0005 (5)\n-55311   Flags               01 (1) 'Modification'\n-55312   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-55316 CENTRAL HEADER #97    02014B50 (33639248)\n-5531A Created Zip Spec      14 (20) '2.0'\n-5531B Created OS            00 (0) 'MS-DOS'\n-5531C Extract Zip Spec      14 (20) '2.0'\n-5531D Extract OS            00 (0) 'MS-DOS'\n-5531E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-55320 Compression Method    0000 (0) 'Stored'\n-55322 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-55326 CRC                   19702ABA (426781370)\n-5532A Compressed Size       00000F11 (3857)\n-5532E Uncompressed Size     00000F11 (3857)\n-55332 Filename Length       0038 (56)\n-55334 Extra Length          0009 (9)\n-55336 Comment Length        0000 (0)\n-55338 Disk Start            0000 (0)\n-5533A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5533C Ext File Attributes   00000000 (0)\n-55340 Local Header Offset   0004784D (292941)\n-55344 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55344: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5537C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5537E   Length              0005 (5)\n-55380   Flags               01 (1) 'Modification'\n-55381   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-55385 CENTRAL HEADER #98    02014B50 (33639248)\n-55389 Created Zip Spec      14 (20) '2.0'\n-5538A Created OS            00 (0) 'MS-DOS'\n-5538B Extract Zip Spec      14 (20) '2.0'\n-5538C Extract OS            00 (0) 'MS-DOS'\n-5538D General Purpose Flag  0000 (0)\n-5538F Compression Method    0000 (0) 'Stored'\n-55391 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-55395 CRC                   00000000 (0)\n-55399 Compressed Size       00000000 (0)\n-5539D Uncompressed Size     00000000 (0)\n-553A1 Filename Length       0025 (37)\n-553A3 Extra Length          0009 (9)\n-553A5 Comment Length        0000 (0)\n-553A7 Disk Start            0000 (0)\n-553A9 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-553AB Ext File Attributes   00000000 (0)\n-553AF Local Header Offset   000487CD (296909)\n-553B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x553B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-553D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-553DA   Length              0005 (5)\n-553DC   Flags               01 (1) 'Modification'\n-553DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-553E1 CENTRAL HEADER #99    02014B50 (33639248)\n-553E5 Created Zip Spec      14 (20) '2.0'\n-553E6 Created OS            00 (0) 'MS-DOS'\n-553E7 Extract Zip Spec      14 (20) '2.0'\n-553E8 Extract OS            00 (0) 'MS-DOS'\n-553E9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-553EB Compression Method    0000 (0) 'Stored'\n-553ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-553F1 CRC                   763975AF (1983477167)\n-553F5 Compressed Size       000008BC (2236)\n-553F9 Uncompressed Size     000008BC (2236)\n-553FD Filename Length       003F (63)\n-553FF Extra Length          0009 (9)\n-55401 Comment Length        0000 (0)\n-55403 Disk Start            0000 (0)\n-55405 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-55407 Ext File Attributes   00000000 (0)\n-5540B Local Header Offset   00048819 (296985)\n-5540F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5540F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5544E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-55450   Length              0005 (5)\n-55452   Flags               01 (1) 'Modification'\n-55453   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-55457 CENTRAL HEADER #100   02014B50 (33639248)\n-5545B Created Zip Spec      14 (20) '2.0'\n-5545C Created OS            00 (0) 'MS-DOS'\n-5545D Extract Zip Spec      14 (20) '2.0'\n-5545E Extract OS            00 (0) 'MS-DOS'\n-5545F General Purpose Flag  0000 (0)\n-55461 Compression Method    0000 (0) 'Stored'\n-55463 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-55467 CRC                   00000000 (0)\n-5546B Compressed Size       00000000 (0)\n-5546F Uncompressed Size     00000000 (0)\n-55473 Filename Length       001F (31)\n-55475 Extra Length          0009 (9)\n-55477 Comment Length        0000 (0)\n-55479 Disk Start            0000 (0)\n-5547B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5547D Ext File Attributes   00000000 (0)\n-55481 Local Header Offset   0004914B (299339)\n-55485 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55485: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-554A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-554A6   Length              0005 (5)\n-554A8   Flags               01 (1) 'Modification'\n-554A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-554AD CENTRAL HEADER #101   02014B50 (33639248)\n-554B1 Created Zip Spec      14 (20) '2.0'\n-554B2 Created OS            00 (0) 'MS-DOS'\n-554B3 Extract Zip Spec      14 (20) '2.0'\n-554B4 Extract OS            00 (0) 'MS-DOS'\n-554B5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-554B7 Compression Method    0000 (0) 'Stored'\n-554B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-554BD CRC                   776F6B16 (2003790614)\n-554C1 Compressed Size       0000084C (2124)\n-554C5 Uncompressed Size     0000084C (2124)\n-554C9 Filename Length       0033 (51)\n-554CB Extra Length          0009 (9)\n-554CD Comment Length        0000 (0)\n-554CF Disk Start            0000 (0)\n-554D1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-554D3 Ext File Attributes   00000000 (0)\n-554D7 Local Header Offset   00049191 (299409)\n-554DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x554DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-5550E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-55510   Length              0005 (5)\n-55512   Flags               01 (1) 'Modification'\n-55513   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-55517 CENTRAL HEADER #102   02014B50 (33639248)\n-5551B Created Zip Spec      14 (20) '2.0'\n-5551C Created OS            00 (0) 'MS-DOS'\n-5551D Extract Zip Spec      14 (20) '2.0'\n-5551E Extract OS            00 (0) 'MS-DOS'\n-5551F General Purpose Flag  0000 (0)\n-55521 Compression Method    0000 (0) 'Stored'\n-55523 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-55527 CRC                   00000000 (0)\n-5552B Compressed Size       00000000 (0)\n-5552F Uncompressed Size     00000000 (0)\n-55533 Filename Length       0023 (35)\n-55535 Extra Length          0009 (9)\n-55537 Comment Length        0000 (0)\n-55539 Disk Start            0000 (0)\n-5553B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5553D Ext File Attributes   00000000 (0)\n-55541 Local Header Offset   00049A47 (301639)\n-55545 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55545: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-55568 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5556A   Length              0005 (5)\n-5556C   Flags               01 (1) 'Modification'\n-5556D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-55571 CENTRAL HEADER #103   02014B50 (33639248)\n-55575 Created Zip Spec      14 (20) '2.0'\n-55576 Created OS            00 (0) 'MS-DOS'\n-55577 Extract Zip Spec      14 (20) '2.0'\n-55578 Extract OS            00 (0) 'MS-DOS'\n-55579 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5557B Compression Method    0000 (0) 'Stored'\n-5557D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-55581 CRC                   A1EB5EED (2716557037)\n-55585 Compressed Size       000016D2 (5842)\n-55589 Uncompressed Size     000016D2 (5842)\n-5558D Filename Length       003F (63)\n-5558F Extra Length          0009 (9)\n-55591 Comment Length        0000 (0)\n-55593 Disk Start            0000 (0)\n-55595 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-55597 Ext File Attributes   00000000 (0)\n-5559B Local Header Offset   00049A91 (301713)\n-5559F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5559F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-555DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-555E0   Length              0005 (5)\n-555E2   Flags               01 (1) 'Modification'\n-555E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-555E7 CENTRAL HEADER #104   02014B50 (33639248)\n-555EB Created Zip Spec      14 (20) '2.0'\n-555EC Created OS            00 (0) 'MS-DOS'\n-555ED Extract Zip Spec      14 (20) '2.0'\n-555EE Extract OS            00 (0) 'MS-DOS'\n-555EF General Purpose Flag  0000 (0)\n-555F1 Compression Method    0000 (0) 'Stored'\n-555F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-555F7 CRC                   00000000 (0)\n-555FB Compressed Size       00000000 (0)\n-555FF Uncompressed Size     00000000 (0)\n-55603 Filename Length       001D (29)\n-55605 Extra Length          0009 (9)\n-55607 Comment Length        0000 (0)\n-55609 Disk Start            0000 (0)\n-5560B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5560D Ext File Attributes   00000000 (0)\n-55611 Local Header Offset   0004B1D9 (307673)\n-55615 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55615: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-55632 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-55634   Length              0005 (5)\n-55636   Flags               01 (1) 'Modification'\n-55637   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5563B CENTRAL HEADER #105   02014B50 (33639248)\n-5563F Created Zip Spec      14 (20) '2.0'\n-55640 Created OS            00 (0) 'MS-DOS'\n-55641 Extract Zip Spec      14 (20) '2.0'\n-55642 Extract OS            00 (0) 'MS-DOS'\n-55643 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-55645 Compression Method    0000 (0) 'Stored'\n-55647 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5564B CRC                   71347931 (1899264305)\n-5564F Compressed Size       00001EE7 (7911)\n-55653 Uncompressed Size     00001EE7 (7911)\n-55657 Filename Length       002F (47)\n-55659 Extra Length          0009 (9)\n-5565B Comment Length        0000 (0)\n-5565D Disk Start            0000 (0)\n-5565F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-55661 Ext File Attributes   00000000 (0)\n-55665 Local Header Offset   0004B21D (307741)\n-55669 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55669: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-55698 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-5569A   Length              0005 (5)\n-5569C   Flags               01 (1) 'Modification'\n-5569D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-556A1 CENTRAL HEADER #106   02014B50 (33639248)\n-556A5 Created Zip Spec      14 (20) '2.0'\n-556A6 Created OS            00 (0) 'MS-DOS'\n-556A7 Extract Zip Spec      14 (20) '2.0'\n-556A8 Extract OS            00 (0) 'MS-DOS'\n-556A9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-556AB Compression Method    0000 (0) 'Stored'\n-556AD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-556B1 CRC                   E459791A (3831068954)\n-556B5 Compressed Size       00002B55 (11093)\n-556B9 Uncompressed Size     00002B55 (11093)\n-556BD Filename Length       002D (45)\n-556BF Extra Length          0009 (9)\n-556C1 Comment Length        0000 (0)\n-556C3 Disk Start            0000 (0)\n-556C5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-556C7 Ext File Attributes   00000000 (0)\n-556CB Local Header Offset   0004D16A (315754)\n-556CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x556CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-556FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-556FE   Length              0005 (5)\n-55700   Flags               01 (1) 'Modification'\n-55701   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-55705 CENTRAL HEADER #107   02014B50 (33639248)\n-55709 Created Zip Spec      14 (20) '2.0'\n-5570A Created OS            00 (0) 'MS-DOS'\n-5570B Extract Zip Spec      14 (20) '2.0'\n-5570C Extract OS            00 (0) 'MS-DOS'\n-5570D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-5570F Compression Method    0000 (0) 'Stored'\n-55711 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-55715 CRC                   80C30D3D (2160266557)\n-55719 Compressed Size       0000065E (1630)\n-5571D Uncompressed Size     0000065E (1630)\n-55721 Filename Length       002E (46)\n-55723 Extra Length          0009 (9)\n-55725 Comment Length        0000 (0)\n-55727 Disk Start            0000 (0)\n-55729 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-5572B Ext File Attributes   00000000 (0)\n-5572F Local Header Offset   0004FD23 (326947)\n-55733 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55733: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-55761 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-55763   Length              0005 (5)\n-55765   Flags               01 (1) 'Modification'\n-55766   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-5576A CENTRAL HEADER #108   02014B50 (33639248)\n-5576E Created Zip Spec      14 (20) '2.0'\n-5576F Created OS            00 (0) 'MS-DOS'\n-55770 Extract Zip Spec      14 (20) '2.0'\n-55771 Extract OS            00 (0) 'MS-DOS'\n-55772 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-55774 Compression Method    0000 (0) 'Stored'\n-55776 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-5577A CRC                   613BF150 (1631318352)\n-5577E Compressed Size       00002B36 (11062)\n-55782 Uncompressed Size     00002B36 (11062)\n-55786 Filename Length       002A (42)\n-55788 Extra Length          0009 (9)\n-5578A Comment Length        0000 (0)\n-5578C Disk Start            0000 (0)\n-5578E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-55790 Ext File Attributes   00000000 (0)\n-55794 Local Header Offset   000503E6 (328678)\n-55798 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55798: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-557C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-557C4   Length              0005 (5)\n-557C6   Flags               01 (1) 'Modification'\n-557C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-557CB END CENTRAL HEADER    06054B50 (101010256)\n-557CF Number of this disk   0000 (0)\n-557D1 Central Dir Disk no   0000 (0)\n-557D3 Entries in this disk  006C (108)\n-557D5 Total Entries         006C (108)\n-557D7 Size of Central Dir   0000284E (10318)\n-557DB Offset to Central Dir 00052F7D (339837)\n-557DF Comment Length        0000 (0)\n+04A78 DATA DESCRIPTOR       08074B50 (134695760)\n+04A7C CRC                   A1CBD481 (2714489985)\n+04A80 Compressed Size       00000971 (2417)\n+04A84 Uncompressed Size     00000971 (2417)\n+\n+04A88 LOCAL HEADER #17      04034B50 (67324752)\n+04A8C Extract Zip Spec      14 (20) '2.0'\n+04A8D Extract OS            00 (0) 'MS-DOS'\n+04A8E General Purpose Flag  0000 (0)\n+04A90 Compression Method    0000 (0) 'Stored'\n+04A92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04A96 CRC                   00000000 (0)\n+04A9A Compressed Size       00000000 (0)\n+04A9E Uncompressed Size     00000000 (0)\n+04AA2 Filename Length       0004 (4)\n+04AA4 Extra Length          0009 (9)\n+04AA6 Filename              'XXXX'\n+#\n+# WARNING: Offset 0x4AA6: Filename 'XXXX'\n+#          Zero length filename\n+#\n+04AAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04AAC   Length              0005 (5)\n+04AAE   Flags               01 (1) 'Modification'\n+04AAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04AB3 LOCAL HEADER #18      04034B50 (67324752)\n+04AB7 Extract Zip Spec      14 (20) '2.0'\n+04AB8 Extract OS            00 (0) 'MS-DOS'\n+04AB9 General Purpose Flag  0000 (0)\n+04ABB Compression Method    0000 (0) 'Stored'\n+04ABD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04AC1 CRC                   00000000 (0)\n+04AC5 Compressed Size       00000000 (0)\n+04AC9 Uncompressed Size     00000000 (0)\n+04ACD Filename Length       000C (12)\n+04ACF Extra Length          0009 (9)\n+04AD1 Filename              'XXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4AD1: Filename 'XXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04ADD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04ADF   Length              0005 (5)\n+04AE1   Flags               01 (1) 'Modification'\n+04AE2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04AE6 LOCAL HEADER #19      04034B50 (67324752)\n+04AEA Extract Zip Spec      14 (20) '2.0'\n+04AEB Extract OS            00 (0) 'MS-DOS'\n+04AEC General Purpose Flag  0000 (0)\n+04AEE Compression Method    0000 (0) 'Stored'\n+04AF0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04AF4 CRC                   00000000 (0)\n+04AF8 Compressed Size       00000000 (0)\n+04AFC Uncompressed Size     00000000 (0)\n+04B00 Filename Length       0012 (18)\n+04B02 Extra Length          0009 (9)\n+04B04 Filename              'XXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B04: Filename 'XXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04B16 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04B18   Length              0005 (5)\n+04B1A   Flags               01 (1) 'Modification'\n+04B1B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04B1F LOCAL HEADER #20      04034B50 (67324752)\n+04B23 Extract Zip Spec      14 (20) '2.0'\n+04B24 Extract OS            00 (0) 'MS-DOS'\n+04B25 General Purpose Flag  0000 (0)\n+04B27 Compression Method    0000 (0) 'Stored'\n+04B29 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04B2D CRC                   00000000 (0)\n+04B31 Compressed Size       00000000 (0)\n+04B35 Uncompressed Size     00000000 (0)\n+04B39 Filename Length       0016 (22)\n+04B3B Extra Length          0009 (9)\n+04B3D Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B3D: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04B53 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04B55   Length              0005 (5)\n+04B57   Flags               01 (1) 'Modification'\n+04B58   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04B5C LOCAL HEADER #21      04034B50 (67324752)\n+04B60 Extract Zip Spec      14 (20) '2.0'\n+04B61 Extract OS            00 (0) 'MS-DOS'\n+04B62 General Purpose Flag  0000 (0)\n+04B64 Compression Method    0000 (0) 'Stored'\n+04B66 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04B6A CRC                   00000000 (0)\n+04B6E Compressed Size       00000000 (0)\n+04B72 Uncompressed Size     00000000 (0)\n+04B76 Filename Length       001E (30)\n+04B78 Extra Length          0009 (9)\n+04B7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4B7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04B98 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04B9A   Length              0005 (5)\n+04B9C   Flags               01 (1) 'Modification'\n+04B9D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+04BA1 LOCAL HEADER #22      04034B50 (67324752)\n+04BA5 Extract Zip Spec      14 (20) '2.0'\n+04BA6 Extract OS            00 (0) 'MS-DOS'\n+04BA7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+04BA9 Compression Method    0000 (0) 'Stored'\n+04BAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04BAF CRC                   00000000 (0)\n+04BB3 Compressed Size       00000000 (0)\n+04BB7 Uncompressed Size     00000000 (0)\n+04BBB Filename Length       002E (46)\n+04BBD Extra Length          0009 (9)\n+04BBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4BBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+04BED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+04BEF   Length              0005 (5)\n+04BF1   Flags               01 (1) 'Modification'\n+04BF2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+04BF6 PAYLOAD\n+\n+04FB5 DATA DESCRIPTOR       08074B50 (134695760)\n+04FB9 CRC                   00900547 (9438535)\n+04FBD Compressed Size       000003BF (959)\n+04FC1 Uncompressed Size     000003BF (959)\n+\n+04FC5 LOCAL HEADER #23      04034B50 (67324752)\n+04FC9 Extract Zip Spec      14 (20) '2.0'\n+04FCA Extract OS            00 (0) 'MS-DOS'\n+04FCB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+04FCD Compression Method    0000 (0) 'Stored'\n+04FCF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+04FD3 CRC                   00000000 (0)\n+04FD7 Compressed Size       00000000 (0)\n+04FDB Uncompressed Size     00000000 (0)\n+04FDF Filename Length       0033 (51)\n+04FE1 Extra Length          0009 (9)\n+04FE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4FE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05016 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05018   Length              0005 (5)\n+0501A   Flags               01 (1) 'Modification'\n+0501B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0501F PAYLOAD\n+\n+0580B DATA DESCRIPTOR       08074B50 (134695760)\n+0580F CRC                   1D274B23 (489114403)\n+05813 Compressed Size       000007EC (2028)\n+05817 Uncompressed Size     000007EC (2028)\n+\n+0581B LOCAL HEADER #24      04034B50 (67324752)\n+0581F Extract Zip Spec      14 (20) '2.0'\n+05820 Extract OS            00 (0) 'MS-DOS'\n+05821 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+05823 Compression Method    0000 (0) 'Stored'\n+05825 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05829 CRC                   00000000 (0)\n+0582D Compressed Size       00000000 (0)\n+05831 Uncompressed Size     00000000 (0)\n+05835 Filename Length       0031 (49)\n+05837 Extra Length          0009 (9)\n+05839 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5839: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0586A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0586C   Length              0005 (5)\n+0586E   Flags               01 (1) 'Modification'\n+0586F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05873 PAYLOAD\n+\n+05CD8 DATA DESCRIPTOR       08074B50 (134695760)\n+05CDC CRC                   C514DA82 (3306478210)\n+05CE0 Compressed Size       00000465 (1125)\n+05CE4 Uncompressed Size     00000465 (1125)\n+\n+05CE8 LOCAL HEADER #25      04034B50 (67324752)\n+05CEC Extract Zip Spec      14 (20) '2.0'\n+05CED Extract OS            00 (0) 'MS-DOS'\n+05CEE General Purpose Flag  0000 (0)\n+05CF0 Compression Method    0000 (0) 'Stored'\n+05CF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05CF6 CRC                   00000000 (0)\n+05CFA Compressed Size       00000000 (0)\n+05CFE Uncompressed Size     00000000 (0)\n+05D02 Filename Length       0004 (4)\n+05D04 Extra Length          0009 (9)\n+05D06 Filename              'XXXX'\n+#\n+# WARNING: Offset 0x5D06: Filename 'XXXX'\n+#          Zero length filename\n+#\n+05D0A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05D0C   Length              0005 (5)\n+05D0E   Flags               01 (1) 'Modification'\n+05D0F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05D13 LOCAL HEADER #26      04034B50 (67324752)\n+05D17 Extract Zip Spec      14 (20) '2.0'\n+05D18 Extract OS            00 (0) 'MS-DOS'\n+05D19 General Purpose Flag  0000 (0)\n+05D1B Compression Method    0000 (0) 'Stored'\n+05D1D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05D21 CRC                   00000000 (0)\n+05D25 Compressed Size       00000000 (0)\n+05D29 Uncompressed Size     00000000 (0)\n+05D2D Filename Length       000B (11)\n+05D2F Extra Length          0009 (9)\n+05D31 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5D31: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05D3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05D3E   Length              0005 (5)\n+05D40   Flags               01 (1) 'Modification'\n+05D41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05D45 LOCAL HEADER #27      04034B50 (67324752)\n+05D49 Extract Zip Spec      14 (20) '2.0'\n+05D4A Extract OS            00 (0) 'MS-DOS'\n+05D4B General Purpose Flag  0000 (0)\n+05D4D Compression Method    0000 (0) 'Stored'\n+05D4F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05D53 CRC                   00000000 (0)\n+05D57 Compressed Size       00000000 (0)\n+05D5B Uncompressed Size     00000000 (0)\n+05D5F Filename Length       0011 (17)\n+05D61 Extra Length          0009 (9)\n+05D63 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5D63: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05D74 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05D76   Length              0005 (5)\n+05D78   Flags               01 (1) 'Modification'\n+05D79   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05D7D LOCAL HEADER #28      04034B50 (67324752)\n+05D81 Extract Zip Spec      14 (20) '2.0'\n+05D82 Extract OS            00 (0) 'MS-DOS'\n+05D83 General Purpose Flag  0000 (0)\n+05D85 Compression Method    0000 (0) 'Stored'\n+05D87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05D8B CRC                   00000000 (0)\n+05D8F Compressed Size       00000000 (0)\n+05D93 Uncompressed Size     00000000 (0)\n+05D97 Filename Length       0015 (21)\n+05D99 Extra Length          0009 (9)\n+05D9B Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5D9B: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05DB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05DB2   Length              0005 (5)\n+05DB4   Flags               01 (1) 'Modification'\n+05DB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05DB9 LOCAL HEADER #29      04034B50 (67324752)\n+05DBD Extract Zip Spec      14 (20) '2.0'\n+05DBE Extract OS            00 (0) 'MS-DOS'\n+05DBF General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+05DC1 Compression Method    0000 (0) 'Stored'\n+05DC3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05DC7 CRC                   00000000 (0)\n+05DCB Compressed Size       00000000 (0)\n+05DCF Uncompressed Size     00000000 (0)\n+05DD3 Filename Length       0025 (37)\n+05DD5 Extra Length          0009 (9)\n+05DD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5DD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05DFC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05DFE   Length              0005 (5)\n+05E00   Flags               01 (1) 'Modification'\n+05E01   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05E05 PAYLOAD\n+\n+07D88 DATA DESCRIPTOR       08074B50 (134695760)\n+07D8C CRC                   58855C59 (1485134937)\n+07D90 Compressed Size       00001F83 (8067)\n+07D94 Uncompressed Size     00001F83 (8067)\n+\n+07D98 LOCAL HEADER #30      04034B50 (67324752)\n+07D9C Extract Zip Spec      14 (20) '2.0'\n+07D9D Extract OS            00 (0) 'MS-DOS'\n+07D9E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+07DA0 Compression Method    0000 (0) 'Stored'\n+07DA2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+07DA6 CRC                   00000000 (0)\n+07DAA Compressed Size       00000000 (0)\n+07DAE Uncompressed Size     00000000 (0)\n+07DB2 Filename Length       0026 (38)\n+07DB4 Extra Length          0009 (9)\n+07DB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7DB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07DDC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07DDE   Length              0005 (5)\n+07DE0   Flags               01 (1) 'Modification'\n+07DE1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+07DE5 PAYLOAD\n+\n+08815 DATA DESCRIPTOR       08074B50 (134695760)\n+08819 CRC                   16C36050 (381902928)\n+0881D Compressed Size       00000A30 (2608)\n+08821 Uncompressed Size     00000A30 (2608)\n+\n+08825 LOCAL HEADER #31      04034B50 (67324752)\n+08829 Extract Zip Spec      14 (20) '2.0'\n+0882A Extract OS            00 (0) 'MS-DOS'\n+0882B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0882D Compression Method    0000 (0) 'Stored'\n+0882F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08833 CRC                   00000000 (0)\n+08837 Compressed Size       00000000 (0)\n+0883B Uncompressed Size     00000000 (0)\n+0883F Filename Length       002A (42)\n+08841 Extra Length          0009 (9)\n+08843 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8843: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0886D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0886F   Length              0005 (5)\n+08871   Flags               01 (1) 'Modification'\n+08872   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08876 PAYLOAD\n+\n+092EC DATA DESCRIPTOR       08074B50 (134695760)\n+092F0 CRC                   28FBE016 (687595542)\n+092F4 Compressed Size       00000A76 (2678)\n+092F8 Uncompressed Size     00000A76 (2678)\n+\n+092FC LOCAL HEADER #32      04034B50 (67324752)\n+09300 Extract Zip Spec      14 (20) '2.0'\n+09301 Extract OS            00 (0) 'MS-DOS'\n+09302 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+09304 Compression Method    0000 (0) 'Stored'\n+09306 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0930A CRC                   00000000 (0)\n+0930E Compressed Size       00000000 (0)\n+09312 Uncompressed Size     00000000 (0)\n+09316 Filename Length       0028 (40)\n+09318 Extra Length          0009 (9)\n+0931A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x931A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09342 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09344   Length              0005 (5)\n+09346   Flags               01 (1) 'Modification'\n+09347   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0934B PAYLOAD\n+\n+0C4C0 DATA DESCRIPTOR       08074B50 (134695760)\n+0C4C4 CRC                   18D15EB0 (416374448)\n+0C4C8 Compressed Size       00003175 (12661)\n+0C4CC Uncompressed Size     00003175 (12661)\n+\n+0C4D0 LOCAL HEADER #33      04034B50 (67324752)\n+0C4D4 Extract Zip Spec      14 (20) '2.0'\n+0C4D5 Extract OS            00 (0) 'MS-DOS'\n+0C4D6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0C4D8 Compression Method    0000 (0) 'Stored'\n+0C4DA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C4DE CRC                   00000000 (0)\n+0C4E2 Compressed Size       00000000 (0)\n+0C4E6 Uncompressed Size     00000000 (0)\n+0C4EA Filename Length       002C (44)\n+0C4EC Extra Length          0009 (9)\n+0C4EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC4EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C51A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C51C   Length              0005 (5)\n+0C51E   Flags               01 (1) 'Modification'\n+0C51F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C523 PAYLOAD\n+\n+0CED2 DATA DESCRIPTOR       08074B50 (134695760)\n+0CED6 CRC                   C1E775CF (3253171663)\n+0CEDA Compressed Size       000009AF (2479)\n+0CEDE Uncompressed Size     000009AF (2479)\n+\n+0CEE2 LOCAL HEADER #34      04034B50 (67324752)\n+0CEE6 Extract Zip Spec      14 (20) '2.0'\n+0CEE7 Extract OS            00 (0) 'MS-DOS'\n+0CEE8 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0CEEA Compression Method    0000 (0) 'Stored'\n+0CEEC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CEF0 CRC                   00000000 (0)\n+0CEF4 Compressed Size       00000000 (0)\n+0CEF8 Uncompressed Size     00000000 (0)\n+0CEFC Filename Length       0023 (35)\n+0CEFE Extra Length          0009 (9)\n+0CF00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCF00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CF23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CF25   Length              0005 (5)\n+0CF27   Flags               01 (1) 'Modification'\n+0CF28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CF2C PAYLOAD\n+\n+0D9A5 DATA DESCRIPTOR       08074B50 (134695760)\n+0D9A9 CRC                   7E97C5F2 (2123875826)\n+0D9AD Compressed Size       00000A79 (2681)\n+0D9B1 Uncompressed Size     00000A79 (2681)\n+\n+0D9B5 LOCAL HEADER #35      04034B50 (67324752)\n+0D9B9 Extract Zip Spec      14 (20) '2.0'\n+0D9BA Extract OS            00 (0) 'MS-DOS'\n+0D9BB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0D9BD Compression Method    0000 (0) 'Stored'\n+0D9BF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D9C3 CRC                   00000000 (0)\n+0D9C7 Compressed Size       00000000 (0)\n+0D9CB Uncompressed Size     00000000 (0)\n+0D9CF Filename Length       0022 (34)\n+0D9D1 Extra Length          0009 (9)\n+0D9D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD9D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D9F5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D9F7   Length              0005 (5)\n+0D9F9   Flags               01 (1) 'Modification'\n+0D9FA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D9FE PAYLOAD\n+\n+0DF3D DATA DESCRIPTOR       08074B50 (134695760)\n+0DF41 CRC                   525AF459 (1381692505)\n+0DF45 Compressed Size       0000053F (1343)\n+0DF49 Uncompressed Size     0000053F (1343)\n+\n+0DF4D LOCAL HEADER #36      04034B50 (67324752)\n+0DF51 Extract Zip Spec      14 (20) '2.0'\n+0DF52 Extract OS            00 (0) 'MS-DOS'\n+0DF53 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0DF55 Compression Method    0000 (0) 'Stored'\n+0DF57 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0DF5B CRC                   00000000 (0)\n+0DF5F Compressed Size       00000000 (0)\n+0DF63 Uncompressed Size     00000000 (0)\n+0DF67 Filename Length       002A (42)\n+0DF69 Extra Length          0009 (9)\n+0DF6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xDF6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0DF95 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0DF97   Length              0005 (5)\n+0DF99   Flags               01 (1) 'Modification'\n+0DF9A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0DF9E PAYLOAD\n+\n+0E54A DATA DESCRIPTOR       08074B50 (134695760)\n+0E54E CRC                   FC32E707 (4231194375)\n+0E552 Compressed Size       000005AC (1452)\n+0E556 Uncompressed Size     000005AC (1452)\n+\n+0E55A LOCAL HEADER #37      04034B50 (67324752)\n+0E55E Extract Zip Spec      14 (20) '2.0'\n+0E55F Extract OS            00 (0) 'MS-DOS'\n+0E560 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0E562 Compression Method    0000 (0) 'Stored'\n+0E564 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E568 CRC                   00000000 (0)\n+0E56C Compressed Size       00000000 (0)\n+0E570 Uncompressed Size     00000000 (0)\n+0E574 Filename Length       0020 (32)\n+0E576 Extra Length          0009 (9)\n+0E578 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE578: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E598 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E59A   Length              0005 (5)\n+0E59C   Flags               01 (1) 'Modification'\n+0E59D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E5A1 PAYLOAD\n+\n+0EF06 DATA DESCRIPTOR       08074B50 (134695760)\n+0EF0A CRC                   2EDA0DE9 (786042345)\n+0EF0E Compressed Size       00000965 (2405)\n+0EF12 Uncompressed Size     00000965 (2405)\n+\n+0EF16 LOCAL HEADER #38      04034B50 (67324752)\n+0EF1A Extract Zip Spec      14 (20) '2.0'\n+0EF1B Extract OS            00 (0) 'MS-DOS'\n+0EF1C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0EF1E Compression Method    0000 (0) 'Stored'\n+0EF20 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EF24 CRC                   00000000 (0)\n+0EF28 Compressed Size       00000000 (0)\n+0EF2C Uncompressed Size     00000000 (0)\n+0EF30 Filename Length       0027 (39)\n+0EF32 Extra Length          0009 (9)\n+0EF34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xEF34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0EF5B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0EF5D   Length              0005 (5)\n+0EF5F   Flags               01 (1) 'Modification'\n+0EF60   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0EF64 PAYLOAD\n+\n+0FF4D DATA DESCRIPTOR       08074B50 (134695760)\n+0FF51 CRC                   F67FCDE8 (4135570920)\n+0FF55 Compressed Size       00000FE9 (4073)\n+0FF59 Uncompressed Size     00000FE9 (4073)\n+\n+0FF5D LOCAL HEADER #39      04034B50 (67324752)\n+0FF61 Extract Zip Spec      14 (20) '2.0'\n+0FF62 Extract OS            00 (0) 'MS-DOS'\n+0FF63 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0FF65 Compression Method    0000 (0) 'Stored'\n+0FF67 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FF6B CRC                   00000000 (0)\n+0FF6F Compressed Size       00000000 (0)\n+0FF73 Uncompressed Size     00000000 (0)\n+0FF77 Filename Length       0024 (36)\n+0FF79 Extra Length          0009 (9)\n+0FF7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFF7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FF9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FFA1   Length              0005 (5)\n+0FFA3   Flags               01 (1) 'Modification'\n+0FFA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FFA8 PAYLOAD\n+\n+10ED5 DATA DESCRIPTOR       08074B50 (134695760)\n+10ED9 CRC                   E5052367 (3842319207)\n+10EDD Compressed Size       00000F2D (3885)\n+10EE1 Uncompressed Size     00000F2D (3885)\n+\n+10EE5 LOCAL HEADER #40      04034B50 (67324752)\n+10EE9 Extract Zip Spec      14 (20) '2.0'\n+10EEA Extract OS            00 (0) 'MS-DOS'\n+10EEB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+10EED Compression Method    0000 (0) 'Stored'\n+10EEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+10EF3 CRC                   00000000 (0)\n+10EF7 Compressed Size       00000000 (0)\n+10EFB Uncompressed Size     00000000 (0)\n+10EFF Filename Length       0024 (36)\n+10F01 Extra Length          0009 (9)\n+10F03 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x10F03: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+10F27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+10F29   Length              0005 (5)\n+10F2B   Flags               01 (1) 'Modification'\n+10F2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+10F30 PAYLOAD\n+\n+112BE DATA DESCRIPTOR       08074B50 (134695760)\n+112C2 CRC                   1A821C29 (444734505)\n+112C6 Compressed Size       0000038E (910)\n+112CA Uncompressed Size     0000038E (910)\n+\n+112CE LOCAL HEADER #41      04034B50 (67324752)\n+112D2 Extract Zip Spec      14 (20) '2.0'\n+112D3 Extract OS            00 (0) 'MS-DOS'\n+112D4 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+112D6 Compression Method    0000 (0) 'Stored'\n+112D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+112DC CRC                   00000000 (0)\n+112E0 Compressed Size       00000000 (0)\n+112E4 Uncompressed Size     00000000 (0)\n+112E8 Filename Length       0021 (33)\n+112EA Extra Length          0009 (9)\n+112EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x112EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1130D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1130F   Length              0005 (5)\n+11311   Flags               01 (1) 'Modification'\n+11312   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11316 PAYLOAD\n+\n+118E7 DATA DESCRIPTOR       08074B50 (134695760)\n+118EB CRC                   19B4DE27 (431283751)\n+118EF Compressed Size       000005D1 (1489)\n+118F3 Uncompressed Size     000005D1 (1489)\n+\n+118F7 LOCAL HEADER #42      04034B50 (67324752)\n+118FB Extract Zip Spec      14 (20) '2.0'\n+118FC Extract OS            00 (0) 'MS-DOS'\n+118FD General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+118FF Compression Method    0000 (0) 'Stored'\n+11901 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11905 CRC                   00000000 (0)\n+11909 Compressed Size       00000000 (0)\n+1190D Uncompressed Size     00000000 (0)\n+11911 Filename Length       0029 (41)\n+11913 Extra Length          0009 (9)\n+11915 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11915: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1193E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11940   Length              0005 (5)\n+11942   Flags               01 (1) 'Modification'\n+11943   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11947 PAYLOAD\n+\n+11EE1 DATA DESCRIPTOR       08074B50 (134695760)\n+11EE5 CRC                   D82F1E47 (3626966599)\n+11EE9 Compressed Size       0000059A (1434)\n+11EED Uncompressed Size     0000059A (1434)\n+\n+11EF1 LOCAL HEADER #43      04034B50 (67324752)\n+11EF5 Extract Zip Spec      14 (20) '2.0'\n+11EF6 Extract OS            00 (0) 'MS-DOS'\n+11EF7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+11EF9 Compression Method    0000 (0) 'Stored'\n+11EFB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+11EFF CRC                   00000000 (0)\n+11F03 Compressed Size       00000000 (0)\n+11F07 Uncompressed Size     00000000 (0)\n+11F0B Filename Length       002A (42)\n+11F0D Extra Length          0009 (9)\n+11F0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x11F0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+11F39 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+11F3B   Length              0005 (5)\n+11F3D   Flags               01 (1) 'Modification'\n+11F3E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+11F42 PAYLOAD\n+\n+12747 DATA DESCRIPTOR       08074B50 (134695760)\n+1274B CRC                   16B7BD77 (381140343)\n+1274F Compressed Size       00000805 (2053)\n+12753 Uncompressed Size     00000805 (2053)\n+\n+12757 LOCAL HEADER #44      04034B50 (67324752)\n+1275B Extract Zip Spec      14 (20) '2.0'\n+1275C Extract OS            00 (0) 'MS-DOS'\n+1275D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1275F Compression Method    0000 (0) 'Stored'\n+12761 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+12765 CRC                   00000000 (0)\n+12769 Compressed Size       00000000 (0)\n+1276D Uncompressed Size     00000000 (0)\n+12771 Filename Length       0022 (34)\n+12773 Extra Length          0009 (9)\n+12775 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x12775: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+12797 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+12799   Length              0005 (5)\n+1279B   Flags               01 (1) 'Modification'\n+1279C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+127A0 PAYLOAD\n+\n+13590 DATA DESCRIPTOR       08074B50 (134695760)\n+13594 CRC                   CCB43BAA (3434363818)\n+13598 Compressed Size       00000DF0 (3568)\n+1359C Uncompressed Size     00000DF0 (3568)\n+\n+135A0 LOCAL HEADER #45      04034B50 (67324752)\n+135A4 Extract Zip Spec      14 (20) '2.0'\n+135A5 Extract OS            00 (0) 'MS-DOS'\n+135A6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+135A8 Compression Method    0000 (0) 'Stored'\n+135AA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+135AE CRC                   00000000 (0)\n+135B2 Compressed Size       00000000 (0)\n+135B6 Uncompressed Size     00000000 (0)\n+135BA Filename Length       0028 (40)\n+135BC Extra Length          0009 (9)\n+135BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x135BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+135E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+135E8   Length              0005 (5)\n+135EA   Flags               01 (1) 'Modification'\n+135EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+135EF PAYLOAD\n+\n+13BEA DATA DESCRIPTOR       08074B50 (134695760)\n+13BEE CRC                   6D231835 (1831016501)\n+13BF2 Compressed Size       000005FB (1531)\n+13BF6 Uncompressed Size     000005FB (1531)\n+\n+13BFA LOCAL HEADER #46      04034B50 (67324752)\n+13BFE Extract Zip Spec      14 (20) '2.0'\n+13BFF Extract OS            00 (0) 'MS-DOS'\n+13C00 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13C02 Compression Method    0000 (0) 'Stored'\n+13C04 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13C08 CRC                   00000000 (0)\n+13C0C Compressed Size       00000000 (0)\n+13C10 Uncompressed Size     00000000 (0)\n+13C14 Filename Length       0026 (38)\n+13C16 Extra Length          0009 (9)\n+13C18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13C18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13C3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13C40   Length              0005 (5)\n+13C42   Flags               01 (1) 'Modification'\n+13C43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+13C47 PAYLOAD\n+\n+14360 DATA DESCRIPTOR       08074B50 (134695760)\n+14364 CRC                   2A77FFA2 (712507298)\n+14368 Compressed Size       00000719 (1817)\n+1436C Uncompressed Size     00000719 (1817)\n+\n+14370 LOCAL HEADER #47      04034B50 (67324752)\n+14374 Extract Zip Spec      14 (20) '2.0'\n+14375 Extract OS            00 (0) 'MS-DOS'\n+14376 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+14378 Compression Method    0000 (0) 'Stored'\n+1437A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1437E CRC                   00000000 (0)\n+14382 Compressed Size       00000000 (0)\n+14386 Uncompressed Size     00000000 (0)\n+1438A Filename Length       0020 (32)\n+1438C Extra Length          0009 (9)\n+1438E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1438E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+143AE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+143B0   Length              0005 (5)\n+143B2   Flags               01 (1) 'Modification'\n+143B3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+143B7 PAYLOAD\n+\n+159B4 DATA DESCRIPTOR       08074B50 (134695760)\n+159B8 CRC                   1DB16B63 (498166627)\n+159BC Compressed Size       000015FD (5629)\n+159C0 Uncompressed Size     000015FD (5629)\n+\n+159C4 LOCAL HEADER #48      04034B50 (67324752)\n+159C8 Extract Zip Spec      14 (20) '2.0'\n+159C9 Extract OS            00 (0) 'MS-DOS'\n+159CA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+159CC Compression Method    0000 (0) 'Stored'\n+159CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+159D2 CRC                   00000000 (0)\n+159D6 Compressed Size       00000000 (0)\n+159DA Uncompressed Size     00000000 (0)\n+159DE Filename Length       0026 (38)\n+159E0 Extra Length          0009 (9)\n+159E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x159E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15A08 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+15A0A   Length              0005 (5)\n+15A0C   Flags               01 (1) 'Modification'\n+15A0D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+15A11 PAYLOAD\n+\n+15FAF DATA DESCRIPTOR       08074B50 (134695760)\n+15FB3 CRC                   3BFD1345 (1006441285)\n+15FB7 Compressed Size       0000059E (1438)\n+15FBB Uncompressed Size     0000059E (1438)\n+\n+15FBF LOCAL HEADER #49      04034B50 (67324752)\n+15FC3 Extract Zip Spec      14 (20) '2.0'\n+15FC4 Extract OS            00 (0) 'MS-DOS'\n+15FC5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+15FC7 Compression Method    0000 (0) 'Stored'\n+15FC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+15FCD CRC                   00000000 (0)\n+15FD1 Compressed Size       00000000 (0)\n+15FD5 Uncompressed Size     00000000 (0)\n+15FD9 Filename Length       0024 (36)\n+15FDB Extra Length          0009 (9)\n+15FDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15FDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16001 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16003   Length              0005 (5)\n+16005   Flags               01 (1) 'Modification'\n+16006   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1600A PAYLOAD\n+\n+1BA67 DATA DESCRIPTOR       08074B50 (134695760)\n+1BA6B CRC                   C3E7F091 (3286757521)\n+1BA6F Compressed Size       00005A5D (23133)\n+1BA73 Uncompressed Size     00005A5D (23133)\n+\n+1BA77 LOCAL HEADER #50      04034B50 (67324752)\n+1BA7B Extract Zip Spec      14 (20) '2.0'\n+1BA7C Extract OS            00 (0) 'MS-DOS'\n+1BA7D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1BA7F Compression Method    0000 (0) 'Stored'\n+1BA81 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1BA85 CRC                   00000000 (0)\n+1BA89 Compressed Size       00000000 (0)\n+1BA8D Uncompressed Size     00000000 (0)\n+1BA91 Filename Length       0026 (38)\n+1BA93 Extra Length          0009 (9)\n+1BA95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1BA95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1BABB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1BABD   Length              0005 (5)\n+1BABF   Flags               01 (1) 'Modification'\n+1BAC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1BAC4 PAYLOAD\n+\n+1C85B DATA DESCRIPTOR       08074B50 (134695760)\n+1C85F CRC                   CCECA2E4 (3438060260)\n+1C863 Compressed Size       00000D97 (3479)\n+1C867 Uncompressed Size     00000D97 (3479)\n+\n+1C86B LOCAL HEADER #51      04034B50 (67324752)\n+1C86F Extract Zip Spec      14 (20) '2.0'\n+1C870 Extract OS            00 (0) 'MS-DOS'\n+1C871 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1C873 Compression Method    0000 (0) 'Stored'\n+1C875 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1C879 CRC                   00000000 (0)\n+1C87D Compressed Size       00000000 (0)\n+1C881 Uncompressed Size     00000000 (0)\n+1C885 Filename Length       0027 (39)\n+1C887 Extra Length          0009 (9)\n+1C889 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1C889: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1C8B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1C8B2   Length              0005 (5)\n+1C8B4   Flags               01 (1) 'Modification'\n+1C8B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1C8B9 PAYLOAD\n+\n+204FC DATA DESCRIPTOR       08074B50 (134695760)\n+20500 CRC                   8DF2CD69 (2381499753)\n+20504 Compressed Size       00003C43 (15427)\n+20508 Uncompressed Size     00003C43 (15427)\n+\n+2050C LOCAL HEADER #52      04034B50 (67324752)\n+20510 Extract Zip Spec      14 (20) '2.0'\n+20511 Extract OS            00 (0) 'MS-DOS'\n+20512 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+20514 Compression Method    0000 (0) 'Stored'\n+20516 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2051A CRC                   00000000 (0)\n+2051E Compressed Size       00000000 (0)\n+20522 Uncompressed Size     00000000 (0)\n+20526 Filename Length       0023 (35)\n+20528 Extra Length          0009 (9)\n+2052A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2052A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2054D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2054F   Length              0005 (5)\n+20551   Flags               01 (1) 'Modification'\n+20552   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+20556 PAYLOAD\n+\n+226E4 DATA DESCRIPTOR       08074B50 (134695760)\n+226E8 CRC                   B577D739 (3044529977)\n+226EC Compressed Size       0000218E (8590)\n+226F0 Uncompressed Size     0000218E (8590)\n+\n+226F4 LOCAL HEADER #53      04034B50 (67324752)\n+226F8 Extract Zip Spec      14 (20) '2.0'\n+226F9 Extract OS            00 (0) 'MS-DOS'\n+226FA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+226FC Compression Method    0000 (0) 'Stored'\n+226FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+22702 CRC                   00000000 (0)\n+22706 Compressed Size       00000000 (0)\n+2270A Uncompressed Size     00000000 (0)\n+2270E Filename Length       002A (42)\n+22710 Extra Length          0009 (9)\n+22712 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x22712: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2273C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2273E   Length              0005 (5)\n+22740   Flags               01 (1) 'Modification'\n+22741   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+22745 PAYLOAD\n+\n+232FF DATA DESCRIPTOR       08074B50 (134695760)\n+23303 CRC                   CDFD7CF6 (3455941878)\n+23307 Compressed Size       00000BBA (3002)\n+2330B Uncompressed Size     00000BBA (3002)\n+\n+2330F LOCAL HEADER #54      04034B50 (67324752)\n+23313 Extract Zip Spec      14 (20) '2.0'\n+23314 Extract OS            00 (0) 'MS-DOS'\n+23315 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+23317 Compression Method    0000 (0) 'Stored'\n+23319 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2331D CRC                   00000000 (0)\n+23321 Compressed Size       00000000 (0)\n+23325 Uncompressed Size     00000000 (0)\n+23329 Filename Length       0026 (38)\n+2332B Extra Length          0009 (9)\n+2332D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2332D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+23353 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+23355   Length              0005 (5)\n+23357   Flags               01 (1) 'Modification'\n+23358   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2335C PAYLOAD\n+\n+23821 DATA DESCRIPTOR       08074B50 (134695760)\n+23825 CRC                   32C986CB (852068043)\n+23829 Compressed Size       000004C5 (1221)\n+2382D Uncompressed Size     000004C5 (1221)\n+\n+23831 LOCAL HEADER #55      04034B50 (67324752)\n+23835 Extract Zip Spec      14 (20) '2.0'\n+23836 Extract OS            00 (0) 'MS-DOS'\n+23837 General Purpose Flag  0000 (0)\n+23839 Compression Method    0000 (0) 'Stored'\n+2383B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2383F CRC                   00000000 (0)\n+23843 Compressed Size       00000000 (0)\n+23847 Uncompressed Size     00000000 (0)\n+2384B Filename Length       001C (28)\n+2384D Extra Length          0009 (9)\n+2384F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2384F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2386B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2386D   Length              0005 (5)\n+2386F   Flags               01 (1) 'Modification'\n+23870   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+23874 LOCAL HEADER #56      04034B50 (67324752)\n+23878 Extract Zip Spec      14 (20) '2.0'\n+23879 Extract OS            00 (0) 'MS-DOS'\n+2387A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2387C Compression Method    0000 (0) 'Stored'\n+2387E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+23882 CRC                   00000000 (0)\n+23886 Compressed Size       00000000 (0)\n+2388A Uncompressed Size     00000000 (0)\n+2388E Filename Length       0030 (48)\n+23890 Extra Length          0009 (9)\n+23892 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x23892: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+238C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+238C4   Length              0005 (5)\n+238C6   Flags               01 (1) 'Modification'\n+238C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+238CB PAYLOAD\n+\n+25728 DATA DESCRIPTOR       08074B50 (134695760)\n+2572C CRC                   9594ED56 (2509565270)\n+25730 Compressed Size       00001E5D (7773)\n+25734 Uncompressed Size     00001E5D (7773)\n+\n+25738 LOCAL HEADER #57      04034B50 (67324752)\n+2573C Extract Zip Spec      14 (20) '2.0'\n+2573D Extract OS            00 (0) 'MS-DOS'\n+2573E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+25740 Compression Method    0000 (0) 'Stored'\n+25742 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+25746 CRC                   00000000 (0)\n+2574A Compressed Size       00000000 (0)\n+2574E Uncompressed Size     00000000 (0)\n+25752 Filename Length       0032 (50)\n+25754 Extra Length          0009 (9)\n+25756 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x25756: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+25788 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2578A   Length              0005 (5)\n+2578C   Flags               01 (1) 'Modification'\n+2578D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+25791 PAYLOAD\n+\n+26DB4 DATA DESCRIPTOR       08074B50 (134695760)\n+26DB8 CRC                   B52DE397 (3039683479)\n+26DBC Compressed Size       00001623 (5667)\n+26DC0 Uncompressed Size     00001623 (5667)\n+\n+26DC4 LOCAL HEADER #58      04034B50 (67324752)\n+26DC8 Extract Zip Spec      14 (20) '2.0'\n+26DC9 Extract OS            00 (0) 'MS-DOS'\n+26DCA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+26DCC Compression Method    0000 (0) 'Stored'\n+26DCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+26DD2 CRC                   00000000 (0)\n+26DD6 Compressed Size       00000000 (0)\n+26DDA Uncompressed Size     00000000 (0)\n+26DDE Filename Length       0032 (50)\n+26DE0 Extra Length          0009 (9)\n+26DE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x26DE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+26E14 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+26E16   Length              0005 (5)\n+26E18   Flags               01 (1) 'Modification'\n+26E19   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+26E1D PAYLOAD\n+\n+27540 DATA DESCRIPTOR       08074B50 (134695760)\n+27544 CRC                   851F3F00 (2233417472)\n+27548 Compressed Size       00000723 (1827)\n+2754C Uncompressed Size     00000723 (1827)\n+\n+27550 LOCAL HEADER #59      04034B50 (67324752)\n+27554 Extract Zip Spec      14 (20) '2.0'\n+27555 Extract OS            00 (0) 'MS-DOS'\n+27556 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+27558 Compression Method    0000 (0) 'Stored'\n+2755A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2755E CRC                   00000000 (0)\n+27562 Compressed Size       00000000 (0)\n+27566 Uncompressed Size     00000000 (0)\n+2756A Filename Length       0031 (49)\n+2756C Extra Length          0009 (9)\n+2756E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2756E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2759F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+275A1   Length              0005 (5)\n+275A3   Flags               01 (1) 'Modification'\n+275A4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+275A8 PAYLOAD\n+\n+28561 DATA DESCRIPTOR       08074B50 (134695760)\n+28565 CRC                   86FDBE3E (2264776254)\n+28569 Compressed Size       00000FB9 (4025)\n+2856D Uncompressed Size     00000FB9 (4025)\n+\n+28571 LOCAL HEADER #60      04034B50 (67324752)\n+28575 Extract Zip Spec      14 (20) '2.0'\n+28576 Extract OS            00 (0) 'MS-DOS'\n+28577 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+28579 Compression Method    0000 (0) 'Stored'\n+2857B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2857F CRC                   00000000 (0)\n+28583 Compressed Size       00000000 (0)\n+28587 Uncompressed Size     00000000 (0)\n+2858B Filename Length       0036 (54)\n+2858D Extra Length          0009 (9)\n+2858F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2858F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+285C5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+285C7   Length              0005 (5)\n+285C9   Flags               01 (1) 'Modification'\n+285CA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+285CE PAYLOAD\n+\n+2935E DATA DESCRIPTOR       08074B50 (134695760)\n+29362 CRC                   CA71D506 (3396457734)\n+29366 Compressed Size       00000D90 (3472)\n+2936A Uncompressed Size     00000D90 (3472)\n+\n+2936E LOCAL HEADER #61      04034B50 (67324752)\n+29372 Extract Zip Spec      14 (20) '2.0'\n+29373 Extract OS            00 (0) 'MS-DOS'\n+29374 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+29376 Compression Method    0000 (0) 'Stored'\n+29378 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2937C CRC                   00000000 (0)\n+29380 Compressed Size       00000000 (0)\n+29384 Uncompressed Size     00000000 (0)\n+29388 Filename Length       002E (46)\n+2938A Extra Length          0009 (9)\n+2938C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2938C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+293BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+293BC   Length              0005 (5)\n+293BE   Flags               01 (1) 'Modification'\n+293BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+293C3 PAYLOAD\n+\n+2AC8F DATA DESCRIPTOR       08074B50 (134695760)\n+2AC93 CRC                   B42DC810 (3022899216)\n+2AC97 Compressed Size       000018CC (6348)\n+2AC9B Uncompressed Size     000018CC (6348)\n+\n+2AC9F LOCAL HEADER #62      04034B50 (67324752)\n+2ACA3 Extract Zip Spec      14 (20) '2.0'\n+2ACA4 Extract OS            00 (0) 'MS-DOS'\n+2ACA5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2ACA7 Compression Method    0000 (0) 'Stored'\n+2ACA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2ACAD CRC                   00000000 (0)\n+2ACB1 Compressed Size       00000000 (0)\n+2ACB5 Uncompressed Size     00000000 (0)\n+2ACB9 Filename Length       0031 (49)\n+2ACBB Extra Length          0009 (9)\n+2ACBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2ACBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2ACEE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2ACF0   Length              0005 (5)\n+2ACF2   Flags               01 (1) 'Modification'\n+2ACF3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2ACF7 PAYLOAD\n+\n+2B9BA DATA DESCRIPTOR       08074B50 (134695760)\n+2B9BE CRC                   5D6B9E17 (1567333911)\n+2B9C2 Compressed Size       00000CC3 (3267)\n+2B9C6 Uncompressed Size     00000CC3 (3267)\n+\n+2B9CA LOCAL HEADER #63      04034B50 (67324752)\n+2B9CE Extract Zip Spec      14 (20) '2.0'\n+2B9CF Extract OS            00 (0) 'MS-DOS'\n+2B9D0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2B9D2 Compression Method    0000 (0) 'Stored'\n+2B9D4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2B9D8 CRC                   00000000 (0)\n+2B9DC Compressed Size       00000000 (0)\n+2B9E0 Uncompressed Size     00000000 (0)\n+2B9E4 Filename Length       002B (43)\n+2B9E6 Extra Length          0009 (9)\n+2B9E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2B9E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2BA13 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2BA15   Length              0005 (5)\n+2BA17   Flags               01 (1) 'Modification'\n+2BA18   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2BA1C PAYLOAD\n+\n+2C158 DATA DESCRIPTOR       08074B50 (134695760)\n+2C15C CRC                   33E95645 (870929989)\n+2C160 Compressed Size       0000073C (1852)\n+2C164 Uncompressed Size     0000073C (1852)\n+\n+2C168 LOCAL HEADER #64      04034B50 (67324752)\n+2C16C Extract Zip Spec      14 (20) '2.0'\n+2C16D Extract OS            00 (0) 'MS-DOS'\n+2C16E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2C170 Compression Method    0000 (0) 'Stored'\n+2C172 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2C176 CRC                   00000000 (0)\n+2C17A Compressed Size       00000000 (0)\n+2C17E Uncompressed Size     00000000 (0)\n+2C182 Filename Length       0030 (48)\n+2C184 Extra Length          0009 (9)\n+2C186 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2C186: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2C1B6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2C1B8   Length              0005 (5)\n+2C1BA   Flags               01 (1) 'Modification'\n+2C1BB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2C1BF PAYLOAD\n+\n+2D865 DATA DESCRIPTOR       08074B50 (134695760)\n+2D869 CRC                   DF14BD96 (3742678422)\n+2D86D Compressed Size       000016A6 (5798)\n+2D871 Uncompressed Size     000016A6 (5798)\n+\n+2D875 LOCAL HEADER #65      04034B50 (67324752)\n+2D879 Extract Zip Spec      14 (20) '2.0'\n+2D87A Extract OS            00 (0) 'MS-DOS'\n+2D87B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2D87D Compression Method    0000 (0) 'Stored'\n+2D87F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2D883 CRC                   00000000 (0)\n+2D887 Compressed Size       00000000 (0)\n+2D88B Uncompressed Size     00000000 (0)\n+2D88F Filename Length       0033 (51)\n+2D891 Extra Length          0009 (9)\n+2D893 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D893: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2D8C6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2D8C8   Length              0005 (5)\n+2D8CA   Flags               01 (1) 'Modification'\n+2D8CB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2D8CF PAYLOAD\n+\n+2E7B1 DATA DESCRIPTOR       08074B50 (134695760)\n+2E7B5 CRC                   FA17120C (4195815948)\n+2E7B9 Compressed Size       00000EE2 (3810)\n+2E7BD Uncompressed Size     00000EE2 (3810)\n+\n+2E7C1 LOCAL HEADER #66      04034B50 (67324752)\n+2E7C5 Extract Zip Spec      14 (20) '2.0'\n+2E7C6 Extract OS            00 (0) 'MS-DOS'\n+2E7C7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E7C9 Compression Method    0000 (0) 'Stored'\n+2E7CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E7CF CRC                   00000000 (0)\n+2E7D3 Compressed Size       00000000 (0)\n+2E7D7 Uncompressed Size     00000000 (0)\n+2E7DB Filename Length       002E (46)\n+2E7DD Extra Length          0009 (9)\n+2E7DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E7DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E80D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E80F   Length              0005 (5)\n+2E811   Flags               01 (1) 'Modification'\n+2E812   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+2E816 PAYLOAD\n+\n+31C51 DATA DESCRIPTOR       08074B50 (134695760)\n+31C55 CRC                   8B21CC44 (2334248004)\n+31C59 Compressed Size       0000343B (13371)\n+31C5D Uncompressed Size     0000343B (13371)\n+\n+31C61 LOCAL HEADER #67      04034B50 (67324752)\n+31C65 Extract Zip Spec      14 (20) '2.0'\n+31C66 Extract OS            00 (0) 'MS-DOS'\n+31C67 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+31C69 Compression Method    0000 (0) 'Stored'\n+31C6B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+31C6F CRC                   00000000 (0)\n+31C73 Compressed Size       00000000 (0)\n+31C77 Uncompressed Size     00000000 (0)\n+31C7B Filename Length       0032 (50)\n+31C7D Extra Length          0009 (9)\n+31C7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x31C7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+31CB1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+31CB3   Length              0005 (5)\n+31CB5   Flags               01 (1) 'Modification'\n+31CB6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+31CBA PAYLOAD\n+\n+348D8 DATA DESCRIPTOR       08074B50 (134695760)\n+348DC CRC                   BDC74FB9 (3183955897)\n+348E0 Compressed Size       00002C1E (11294)\n+348E4 Uncompressed Size     00002C1E (11294)\n+\n+348E8 LOCAL HEADER #68      04034B50 (67324752)\n+348EC Extract Zip Spec      14 (20) '2.0'\n+348ED Extract OS            00 (0) 'MS-DOS'\n+348EE General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+348F0 Compression Method    0000 (0) 'Stored'\n+348F2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+348F6 CRC                   00000000 (0)\n+348FA Compressed Size       00000000 (0)\n+348FE Uncompressed Size     00000000 (0)\n+34902 Filename Length       002E (46)\n+34904 Extra Length          0009 (9)\n+34906 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x34906: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+34934 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+34936   Length              0005 (5)\n+34938   Flags               01 (1) 'Modification'\n+34939   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3493D PAYLOAD\n+\n+35478 DATA DESCRIPTOR       08074B50 (134695760)\n+3547C CRC                   4BE7E92F (1273489711)\n+35480 Compressed Size       00000B3B (2875)\n+35484 Uncompressed Size     00000B3B (2875)\n+\n+35488 LOCAL HEADER #69      04034B50 (67324752)\n+3548C Extract Zip Spec      14 (20) '2.0'\n+3548D Extract OS            00 (0) 'MS-DOS'\n+3548E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+35490 Compression Method    0000 (0) 'Stored'\n+35492 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+35496 CRC                   00000000 (0)\n+3549A Compressed Size       00000000 (0)\n+3549E Uncompressed Size     00000000 (0)\n+354A2 Filename Length       002C (44)\n+354A4 Extra Length          0009 (9)\n+354A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x354A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+354D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+354D4   Length              0005 (5)\n+354D6   Flags               01 (1) 'Modification'\n+354D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+354DB PAYLOAD\n+\n+35EF0 DATA DESCRIPTOR       08074B50 (134695760)\n+35EF4 CRC                   EE9BE4CE (4003194062)\n+35EF8 Compressed Size       00000A15 (2581)\n+35EFC Uncompressed Size     00000A15 (2581)\n+\n+35F00 LOCAL HEADER #70      04034B50 (67324752)\n+35F04 Extract Zip Spec      14 (20) '2.0'\n+35F05 Extract OS            00 (0) 'MS-DOS'\n+35F06 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+35F08 Compression Method    0000 (0) 'Stored'\n+35F0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+35F0E CRC                   00000000 (0)\n+35F12 Compressed Size       00000000 (0)\n+35F16 Uncompressed Size     00000000 (0)\n+35F1A Filename Length       002F (47)\n+35F1C Extra Length          0009 (9)\n+35F1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x35F1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+35F4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+35F4F   Length              0005 (5)\n+35F51   Flags               01 (1) 'Modification'\n+35F52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+35F56 PAYLOAD\n+\n+36992 DATA DESCRIPTOR       08074B50 (134695760)\n+36996 CRC                   930DE3AE (2467161006)\n+3699A Compressed Size       00000A3C (2620)\n+3699E Uncompressed Size     00000A3C (2620)\n+\n+369A2 LOCAL HEADER #71      04034B50 (67324752)\n+369A6 Extract Zip Spec      14 (20) '2.0'\n+369A7 Extract OS            00 (0) 'MS-DOS'\n+369A8 General Purpose Flag  0000 (0)\n+369AA Compression Method    0000 (0) 'Stored'\n+369AC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+369B0 CRC                   00000000 (0)\n+369B4 Compressed Size       00000000 (0)\n+369B8 Uncompressed Size     00000000 (0)\n+369BC Filename Length       0020 (32)\n+369BE Extra Length          0009 (9)\n+369C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x369C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+369E0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+369E2   Length              0005 (5)\n+369E4   Flags               01 (1) 'Modification'\n+369E5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+369E9 LOCAL HEADER #72      04034B50 (67324752)\n+369ED Extract Zip Spec      14 (20) '2.0'\n+369EE Extract OS            00 (0) 'MS-DOS'\n+369EF General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+369F1 Compression Method    0000 (0) 'Stored'\n+369F3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+369F7 CRC                   00000000 (0)\n+369FB Compressed Size       00000000 (0)\n+369FF Uncompressed Size     00000000 (0)\n+36A03 Filename Length       0036 (54)\n+36A05 Extra Length          0009 (9)\n+36A07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x36A07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+36A3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+36A3F   Length              0005 (5)\n+36A41   Flags               01 (1) 'Modification'\n+36A42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+36A46 PAYLOAD\n+\n+37525 DATA DESCRIPTOR       08074B50 (134695760)\n+37529 CRC                   184AAEF9 (407547641)\n+3752D Compressed Size       00000ADF (2783)\n+37531 Uncompressed Size     00000ADF (2783)\n+\n+37535 LOCAL HEADER #73      04034B50 (67324752)\n+37539 Extract Zip Spec      14 (20) '2.0'\n+3753A Extract OS            00 (0) 'MS-DOS'\n+3753B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3753D Compression Method    0000 (0) 'Stored'\n+3753F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+37543 CRC                   00000000 (0)\n+37547 Compressed Size       00000000 (0)\n+3754B Uncompressed Size     00000000 (0)\n+3754F Filename Length       002D (45)\n+37551 Extra Length          0009 (9)\n+37553 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x37553: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+37580 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+37582   Length              0005 (5)\n+37584   Flags               01 (1) 'Modification'\n+37585   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+37589 PAYLOAD\n+\n+37FF9 DATA DESCRIPTOR       08074B50 (134695760)\n+37FFD CRC                   3867D7AC (946329516)\n+38001 Compressed Size       00000A70 (2672)\n+38005 Uncompressed Size     00000A70 (2672)\n+\n+38009 LOCAL HEADER #74      04034B50 (67324752)\n+3800D Extract Zip Spec      14 (20) '2.0'\n+3800E Extract OS            00 (0) 'MS-DOS'\n+3800F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+38011 Compression Method    0000 (0) 'Stored'\n+38013 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+38017 CRC                   00000000 (0)\n+3801B Compressed Size       00000000 (0)\n+3801F Uncompressed Size     00000000 (0)\n+38023 Filename Length       002F (47)\n+38025 Extra Length          0009 (9)\n+38027 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x38027: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+38056 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+38058   Length              0005 (5)\n+3805A   Flags               01 (1) 'Modification'\n+3805B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3805F PAYLOAD\n+\n+386D7 DATA DESCRIPTOR       08074B50 (134695760)\n+386DB CRC                   00E586BE (15042238)\n+386DF Compressed Size       00000678 (1656)\n+386E3 Uncompressed Size     00000678 (1656)\n+\n+386E7 LOCAL HEADER #75      04034B50 (67324752)\n+386EB Extract Zip Spec      14 (20) '2.0'\n+386EC Extract OS            00 (0) 'MS-DOS'\n+386ED General Purpose Flag  0000 (0)\n+386EF Compression Method    0000 (0) 'Stored'\n+386F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+386F5 CRC                   00000000 (0)\n+386F9 Compressed Size       00000000 (0)\n+386FD Uncompressed Size     00000000 (0)\n+38701 Filename Length       001E (30)\n+38703 Extra Length          0009 (9)\n+38705 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x38705: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+38723 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+38725   Length              0005 (5)\n+38727   Flags               01 (1) 'Modification'\n+38728   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3872C LOCAL HEADER #76      04034B50 (67324752)\n+38730 Extract Zip Spec      14 (20) '2.0'\n+38731 Extract OS            00 (0) 'MS-DOS'\n+38732 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+38734 Compression Method    0000 (0) 'Stored'\n+38736 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3873A CRC                   00000000 (0)\n+3873E Compressed Size       00000000 (0)\n+38742 Uncompressed Size     00000000 (0)\n+38746 Filename Length       003C (60)\n+38748 Extra Length          0009 (9)\n+3874A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3874A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+38786 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+38788   Length              0005 (5)\n+3878A   Flags               01 (1) 'Modification'\n+3878B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3878F PAYLOAD\n+\n+38E3C DATA DESCRIPTOR       08074B50 (134695760)\n+38E40 CRC                   E1C5881F (3787819039)\n+38E44 Compressed Size       000006AD (1709)\n+38E48 Uncompressed Size     000006AD (1709)\n+\n+38E4C LOCAL HEADER #77      04034B50 (67324752)\n+38E50 Extract Zip Spec      14 (20) '2.0'\n+38E51 Extract OS            00 (0) 'MS-DOS'\n+38E52 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+38E54 Compression Method    0000 (0) 'Stored'\n+38E56 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+38E5A CRC                   00000000 (0)\n+38E5E Compressed Size       00000000 (0)\n+38E62 Uncompressed Size     00000000 (0)\n+38E66 Filename Length       003A (58)\n+38E68 Extra Length          0009 (9)\n+38E6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x38E6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+38EA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+38EA6   Length              0005 (5)\n+38EA8   Flags               01 (1) 'Modification'\n+38EA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+38EAD PAYLOAD\n+\n+393C2 DATA DESCRIPTOR       08074B50 (134695760)\n+393C6 CRC                   FE9FE6BA (4271892154)\n+393CA Compressed Size       00000515 (1301)\n+393CE Uncompressed Size     00000515 (1301)\n+\n+393D2 LOCAL HEADER #78      04034B50 (67324752)\n+393D6 Extract Zip Spec      14 (20) '2.0'\n+393D7 Extract OS            00 (0) 'MS-DOS'\n+393D8 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+393DA Compression Method    0000 (0) 'Stored'\n+393DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+393E0 CRC                   00000000 (0)\n+393E4 Compressed Size       00000000 (0)\n+393E8 Uncompressed Size     00000000 (0)\n+393EC Filename Length       0039 (57)\n+393EE Extra Length          0009 (9)\n+393F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x393F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+39429 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3942B   Length              0005 (5)\n+3942D   Flags               01 (1) 'Modification'\n+3942E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+39432 PAYLOAD\n+\n+39929 DATA DESCRIPTOR       08074B50 (134695760)\n+3992D CRC                   07F77085 (133656709)\n+39931 Compressed Size       000004F7 (1271)\n+39935 Uncompressed Size     000004F7 (1271)\n+\n+39939 LOCAL HEADER #79      04034B50 (67324752)\n+3993D Extract Zip Spec      14 (20) '2.0'\n+3993E Extract OS            00 (0) 'MS-DOS'\n+3993F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+39941 Compression Method    0000 (0) 'Stored'\n+39943 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+39947 CRC                   00000000 (0)\n+3994B Compressed Size       00000000 (0)\n+3994F Uncompressed Size     00000000 (0)\n+39953 Filename Length       003A (58)\n+39955 Extra Length          0009 (9)\n+39957 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x39957: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+39991 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+39993   Length              0005 (5)\n+39995   Flags               01 (1) 'Modification'\n+39996   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3999A PAYLOAD\n+\n+3A634 DATA DESCRIPTOR       08074B50 (134695760)\n+3A638 CRC                   334FA791 (860858257)\n+3A63C Compressed Size       00000C9A (3226)\n+3A640 Uncompressed Size     00000C9A (3226)\n+\n+3A644 LOCAL HEADER #80      04034B50 (67324752)\n+3A648 Extract Zip Spec      14 (20) '2.0'\n+3A649 Extract OS            00 (0) 'MS-DOS'\n+3A64A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3A64C Compression Method    0000 (0) 'Stored'\n+3A64E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3A652 CRC                   00000000 (0)\n+3A656 Compressed Size       00000000 (0)\n+3A65A Uncompressed Size     00000000 (0)\n+3A65E Filename Length       0039 (57)\n+3A660 Extra Length          0009 (9)\n+3A662 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3A662: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3A69B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3A69D   Length              0005 (5)\n+3A69F   Flags               01 (1) 'Modification'\n+3A6A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3A6A4 PAYLOAD\n+\n+3B3FB DATA DESCRIPTOR       08074B50 (134695760)\n+3B3FF CRC                   5C26FEE4 (1546059492)\n+3B403 Compressed Size       00000D57 (3415)\n+3B407 Uncompressed Size     00000D57 (3415)\n+\n+3B40B LOCAL HEADER #81      04034B50 (67324752)\n+3B40F Extract Zip Spec      14 (20) '2.0'\n+3B410 Extract OS            00 (0) 'MS-DOS'\n+3B411 General Purpose Flag  0000 (0)\n+3B413 Compression Method    0000 (0) 'Stored'\n+3B415 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3B419 CRC                   00000000 (0)\n+3B41D Compressed Size       00000000 (0)\n+3B421 Uncompressed Size     00000000 (0)\n+3B425 Filename Length       001E (30)\n+3B427 Extra Length          0009 (9)\n+3B429 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3B429: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3B447 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3B449   Length              0005 (5)\n+3B44B   Flags               01 (1) 'Modification'\n+3B44C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+3B450 LOCAL HEADER #82      04034B50 (67324752)\n+3B454 Extract Zip Spec      14 (20) '2.0'\n+3B455 Extract OS            00 (0) 'MS-DOS'\n+3B456 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3B458 Compression Method    0000 (0) 'Stored'\n+3B45A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3B45E CRC                   00000000 (0)\n+3B462 Compressed Size       00000000 (0)\n+3B466 Uncompressed Size     00000000 (0)\n+3B46A Filename Length       0033 (51)\n+3B46C Extra Length          0009 (9)\n+3B46E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3B46E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3B4A1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3B4A3   Length              0005 (5)\n+3B4A5   Flags               01 (1) 'Modification'\n+3B4A6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3B4AA PAYLOAD\n+\n+3BDA0 DATA DESCRIPTOR       08074B50 (134695760)\n+3BDA4 CRC                   EC8B751D (3968562461)\n+3BDA8 Compressed Size       000008F6 (2294)\n+3BDAC Uncompressed Size     000008F6 (2294)\n+\n+3BDB0 LOCAL HEADER #83      04034B50 (67324752)\n+3BDB4 Extract Zip Spec      14 (20) '2.0'\n+3BDB5 Extract OS            00 (0) 'MS-DOS'\n+3BDB6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3BDB8 Compression Method    0000 (0) 'Stored'\n+3BDBA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3BDBE CRC                   00000000 (0)\n+3BDC2 Compressed Size       00000000 (0)\n+3BDC6 Uncompressed Size     00000000 (0)\n+3BDCA Filename Length       0032 (50)\n+3BDCC Extra Length          0009 (9)\n+3BDCE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3BDCE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3BE00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3BE02   Length              0005 (5)\n+3BE04   Flags               01 (1) 'Modification'\n+3BE05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3BE09 PAYLOAD\n+\n+3DE2B DATA DESCRIPTOR       08074B50 (134695760)\n+3DE2F CRC                   62F535FA (1660237306)\n+3DE33 Compressed Size       00002022 (8226)\n+3DE37 Uncompressed Size     00002022 (8226)\n+\n+3DE3B LOCAL HEADER #84      04034B50 (67324752)\n+3DE3F Extract Zip Spec      14 (20) '2.0'\n+3DE40 Extract OS            00 (0) 'MS-DOS'\n+3DE41 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3DE43 Compression Method    0000 (0) 'Stored'\n+3DE45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3DE49 CRC                   00000000 (0)\n+3DE4D Compressed Size       00000000 (0)\n+3DE51 Uncompressed Size     00000000 (0)\n+3DE55 Filename Length       0033 (51)\n+3DE57 Extra Length          0009 (9)\n+3DE59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3DE59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3DE8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3DE8E   Length              0005 (5)\n+3DE90   Flags               01 (1) 'Modification'\n+3DE91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3DE95 PAYLOAD\n+\n+3F007 DATA DESCRIPTOR       08074B50 (134695760)\n+3F00B CRC                   56578DF7 (1448578551)\n+3F00F Compressed Size       00001172 (4466)\n+3F013 Uncompressed Size     00001172 (4466)\n+\n+3F017 LOCAL HEADER #85      04034B50 (67324752)\n+3F01B Extract Zip Spec      14 (20) '2.0'\n+3F01C Extract OS            00 (0) 'MS-DOS'\n+3F01D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+3F01F Compression Method    0000 (0) 'Stored'\n+3F021 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+3F025 CRC                   00000000 (0)\n+3F029 Compressed Size       00000000 (0)\n+3F02D Uncompressed Size     00000000 (0)\n+3F031 Filename Length       0038 (56)\n+3F033 Extra Length          0009 (9)\n+3F035 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3F035: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+3F06D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+3F06F   Length              0005 (5)\n+3F071   Flags               01 (1) 'Modification'\n+3F072   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+3F076 PAYLOAD\n+\n+4125A DATA DESCRIPTOR       08074B50 (134695760)\n+4125E CRC                   1140D3D7 (289461207)\n+41262 Compressed Size       000021E4 (8676)\n+41266 Uncompressed Size     000021E4 (8676)\n+\n+4126A LOCAL HEADER #86      04034B50 (67324752)\n+4126E Extract Zip Spec      14 (20) '2.0'\n+4126F Extract OS            00 (0) 'MS-DOS'\n+41270 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+41272 Compression Method    0000 (0) 'Stored'\n+41274 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+41278 CRC                   00000000 (0)\n+4127C Compressed Size       00000000 (0)\n+41280 Uncompressed Size     00000000 (0)\n+41284 Filename Length       0035 (53)\n+41286 Extra Length          0009 (9)\n+41288 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x41288: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+412BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+412BF   Length              0005 (5)\n+412C1   Flags               01 (1) 'Modification'\n+412C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+412C6 PAYLOAD\n+\n+42282 DATA DESCRIPTOR       08074B50 (134695760)\n+42286 CRC                   B6A13567 (3064018279)\n+4228A Compressed Size       00000FBC (4028)\n+4228E Uncompressed Size     00000FBC (4028)\n+\n+42292 LOCAL HEADER #87      04034B50 (67324752)\n+42296 Extract Zip Spec      14 (20) '2.0'\n+42297 Extract OS            00 (0) 'MS-DOS'\n+42298 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4229A Compression Method    0000 (0) 'Stored'\n+4229C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+422A0 CRC                   00000000 (0)\n+422A4 Compressed Size       00000000 (0)\n+422A8 Uncompressed Size     00000000 (0)\n+422AC Filename Length       002D (45)\n+422AE Extra Length          0009 (9)\n+422B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x422B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+422DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+422DF   Length              0005 (5)\n+422E1   Flags               01 (1) 'Modification'\n+422E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+422E6 PAYLOAD\n+\n+43304 DATA DESCRIPTOR       08074B50 (134695760)\n+43308 CRC                   0A163D1E (169229598)\n+4330C Compressed Size       0000101E (4126)\n+43310 Uncompressed Size     0000101E (4126)\n+\n+43314 LOCAL HEADER #88      04034B50 (67324752)\n+43318 Extract Zip Spec      14 (20) '2.0'\n+43319 Extract OS            00 (0) 'MS-DOS'\n+4331A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4331C Compression Method    0000 (0) 'Stored'\n+4331E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+43322 CRC                   00000000 (0)\n+43326 Compressed Size       00000000 (0)\n+4332A Uncompressed Size     00000000 (0)\n+4332E Filename Length       0031 (49)\n+43330 Extra Length          0009 (9)\n+43332 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x43332: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+43363 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+43365   Length              0005 (5)\n+43367   Flags               01 (1) 'Modification'\n+43368   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+4336C PAYLOAD\n+\n+43A99 DATA DESCRIPTOR       08074B50 (134695760)\n+43A9D CRC                   873A5673 (2268747379)\n+43AA1 Compressed Size       0000072D (1837)\n+43AA5 Uncompressed Size     0000072D (1837)\n+\n+43AA9 LOCAL HEADER #89      04034B50 (67324752)\n+43AAD Extract Zip Spec      14 (20) '2.0'\n+43AAE Extract OS            00 (0) 'MS-DOS'\n+43AAF General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+43AB1 Compression Method    0000 (0) 'Stored'\n+43AB3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+43AB7 CRC                   00000000 (0)\n+43ABB Compressed Size       00000000 (0)\n+43ABF Uncompressed Size     00000000 (0)\n+43AC3 Filename Length       0038 (56)\n+43AC5 Extra Length          0009 (9)\n+43AC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x43AC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+43AFF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+43B01   Length              0005 (5)\n+43B03   Flags               01 (1) 'Modification'\n+43B04   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+43B08 PAYLOAD\n+\n+44858 DATA DESCRIPTOR       08074B50 (134695760)\n+4485C CRC                   B63E72D7 (3057545943)\n+44860 Compressed Size       00000D50 (3408)\n+44864 Uncompressed Size     00000D50 (3408)\n+\n+44868 LOCAL HEADER #90      04034B50 (67324752)\n+4486C Extract Zip Spec      14 (20) '2.0'\n+4486D Extract OS            00 (0) 'MS-DOS'\n+4486E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+44870 Compression Method    0000 (0) 'Stored'\n+44872 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+44876 CRC                   00000000 (0)\n+4487A Compressed Size       00000000 (0)\n+4487E Uncompressed Size     00000000 (0)\n+44882 Filename Length       003A (58)\n+44884 Extra Length          0009 (9)\n+44886 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x44886: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+448C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+448C2   Length              0005 (5)\n+448C4   Flags               01 (1) 'Modification'\n+448C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+448C9 PAYLOAD\n+\n+455E1 DATA DESCRIPTOR       08074B50 (134695760)\n+455E5 CRC                   C40EC84E (3289303118)\n+455E9 Compressed Size       00000D18 (3352)\n+455ED Uncompressed Size     00000D18 (3352)\n+\n+455F1 LOCAL HEADER #91      04034B50 (67324752)\n+455F5 Extract Zip Spec      14 (20) '2.0'\n+455F6 Extract OS            00 (0) 'MS-DOS'\n+455F7 General Purpose Flag  0000 (0)\n+455F9 Compression Method    0000 (0) 'Stored'\n+455FB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+455FF CRC                   00000000 (0)\n+45603 Compressed Size       00000000 (0)\n+45607 Uncompressed Size     00000000 (0)\n+4560B Filename Length       0024 (36)\n+4560D Extra Length          0009 (9)\n+4560F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4560F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+45633 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+45635   Length              0005 (5)\n+45637   Flags               01 (1) 'Modification'\n+45638   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4563C LOCAL HEADER #92      04034B50 (67324752)\n+45640 Extract Zip Spec      14 (20) '2.0'\n+45641 Extract OS            00 (0) 'MS-DOS'\n+45642 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+45644 Compression Method    0000 (0) 'Stored'\n+45646 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4564A CRC                   00000000 (0)\n+4564E Compressed Size       00000000 (0)\n+45652 Uncompressed Size     00000000 (0)\n+45656 Filename Length       0036 (54)\n+45658 Extra Length          0009 (9)\n+4565A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4565A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+45690 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+45692   Length              0005 (5)\n+45694   Flags               01 (1) 'Modification'\n+45695   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+45699 PAYLOAD\n+\n+464AA DATA DESCRIPTOR       08074B50 (134695760)\n+464AE CRC                   3F21380C (1059141644)\n+464B2 Compressed Size       00000E11 (3601)\n+464B6 Uncompressed Size     00000E11 (3601)\n+\n+464BA LOCAL HEADER #93      04034B50 (67324752)\n+464BE Extract Zip Spec      14 (20) '2.0'\n+464BF Extract OS            00 (0) 'MS-DOS'\n+464C0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+464C2 Compression Method    0000 (0) 'Stored'\n+464C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+464C8 CRC                   00000000 (0)\n+464CC Compressed Size       00000000 (0)\n+464D0 Uncompressed Size     00000000 (0)\n+464D4 Filename Length       0035 (53)\n+464D6 Extra Length          0009 (9)\n+464D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x464D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4650D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4650F   Length              0005 (5)\n+46511   Flags               01 (1) 'Modification'\n+46512   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+46516 PAYLOAD\n+\n+46934 DATA DESCRIPTOR       08074B50 (134695760)\n+46938 CRC                   49F89DC8 (1241030088)\n+4693C Compressed Size       0000041E (1054)\n+46940 Uncompressed Size     0000041E (1054)\n+\n+46944 LOCAL HEADER #94      04034B50 (67324752)\n+46948 Extract Zip Spec      14 (20) '2.0'\n+46949 Extract OS            00 (0) 'MS-DOS'\n+4694A General Purpose Flag  0000 (0)\n+4694C Compression Method    0000 (0) 'Stored'\n+4694E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+46952 CRC                   00000000 (0)\n+46956 Compressed Size       00000000 (0)\n+4695A Uncompressed Size     00000000 (0)\n+4695E Filename Length       001B (27)\n+46960 Extra Length          0009 (9)\n+46962 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x46962: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4697D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4697F   Length              0005 (5)\n+46981   Flags               01 (1) 'Modification'\n+46982   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+46986 LOCAL HEADER #95      04034B50 (67324752)\n+4698A Extract Zip Spec      14 (20) '2.0'\n+4698B Extract OS            00 (0) 'MS-DOS'\n+4698C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4698E Compression Method    0000 (0) 'Stored'\n+46990 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+46994 CRC                   00000000 (0)\n+46998 Compressed Size       00000000 (0)\n+4699C Uncompressed Size     00000000 (0)\n+469A0 Filename Length       0034 (52)\n+469A2 Extra Length          0009 (9)\n+469A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x469A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+469D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+469DA   Length              0005 (5)\n+469DC   Flags               01 (1) 'Modification'\n+469DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+469E1 PAYLOAD\n+\n+4768F DATA DESCRIPTOR       08074B50 (134695760)\n+47693 CRC                   E40DEA4B (3826117195)\n+47697 Compressed Size       00000CAE (3246)\n+4769B Uncompressed Size     00000CAE (3246)\n+\n+4769F LOCAL HEADER #96      04034B50 (67324752)\n+476A3 Extract Zip Spec      14 (20) '2.0'\n+476A4 Extract OS            00 (0) 'MS-DOS'\n+476A5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+476A7 Compression Method    0000 (0) 'Stored'\n+476A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+476AD CRC                   00000000 (0)\n+476B1 Compressed Size       00000000 (0)\n+476B5 Uncompressed Size     00000000 (0)\n+476B9 Filename Length       0034 (52)\n+476BB Extra Length          0009 (9)\n+476BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x476BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+476F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+476F3   Length              0005 (5)\n+476F5   Flags               01 (1) 'Modification'\n+476F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+476FA PAYLOAD\n+\n+48A69 DATA DESCRIPTOR       08074B50 (134695760)\n+48A6D CRC                   09E32673 (165881459)\n+48A71 Compressed Size       0000136F (4975)\n+48A75 Uncompressed Size     0000136F (4975)\n+\n+48A79 LOCAL HEADER #97      04034B50 (67324752)\n+48A7D Extract Zip Spec      14 (20) '2.0'\n+48A7E Extract OS            00 (0) 'MS-DOS'\n+48A7F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+48A81 Compression Method    0000 (0) 'Stored'\n+48A83 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+48A87 CRC                   00000000 (0)\n+48A8B Compressed Size       00000000 (0)\n+48A8F Uncompressed Size     00000000 (0)\n+48A93 Filename Length       0038 (56)\n+48A95 Extra Length          0009 (9)\n+48A97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x48A97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+48ACF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+48AD1   Length              0005 (5)\n+48AD3   Flags               01 (1) 'Modification'\n+48AD4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+48AD8 PAYLOAD\n+\n+49A4B DATA DESCRIPTOR       08074B50 (134695760)\n+49A4F CRC                   BE828C08 (3196226568)\n+49A53 Compressed Size       00000F73 (3955)\n+49A57 Uncompressed Size     00000F73 (3955)\n+\n+49A5B LOCAL HEADER #98      04034B50 (67324752)\n+49A5F Extract Zip Spec      14 (20) '2.0'\n+49A60 Extract OS            00 (0) 'MS-DOS'\n+49A61 General Purpose Flag  0000 (0)\n+49A63 Compression Method    0000 (0) 'Stored'\n+49A65 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+49A69 CRC                   00000000 (0)\n+49A6D Compressed Size       00000000 (0)\n+49A71 Uncompressed Size     00000000 (0)\n+49A75 Filename Length       0025 (37)\n+49A77 Extra Length          0009 (9)\n+49A79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x49A79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+49A9E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+49AA0   Length              0005 (5)\n+49AA2   Flags               01 (1) 'Modification'\n+49AA3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+49AA7 LOCAL HEADER #99      04034B50 (67324752)\n+49AAB Extract Zip Spec      14 (20) '2.0'\n+49AAC Extract OS            00 (0) 'MS-DOS'\n+49AAD General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+49AAF Compression Method    0000 (0) 'Stored'\n+49AB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+49AB5 CRC                   00000000 (0)\n+49AB9 Compressed Size       00000000 (0)\n+49ABD Uncompressed Size     00000000 (0)\n+49AC1 Filename Length       003F (63)\n+49AC3 Extra Length          0009 (9)\n+49AC5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x49AC5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+49B04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+49B06   Length              0005 (5)\n+49B08   Flags               01 (1) 'Modification'\n+49B09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+49B0D PAYLOAD\n+\n+4A3FD DATA DESCRIPTOR       08074B50 (134695760)\n+4A401 CRC                   33B08A9A (867207834)\n+4A405 Compressed Size       000008F0 (2288)\n+4A409 Uncompressed Size     000008F0 (2288)\n+\n+4A40D LOCAL HEADER #100     04034B50 (67324752)\n+4A411 Extract Zip Spec      14 (20) '2.0'\n+4A412 Extract OS            00 (0) 'MS-DOS'\n+4A413 General Purpose Flag  0000 (0)\n+4A415 Compression Method    0000 (0) 'Stored'\n+4A417 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4A41B CRC                   00000000 (0)\n+4A41F Compressed Size       00000000 (0)\n+4A423 Uncompressed Size     00000000 (0)\n+4A427 Filename Length       001F (31)\n+4A429 Extra Length          0009 (9)\n+4A42B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4A42B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4A44A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4A44C   Length              0005 (5)\n+4A44E   Flags               01 (1) 'Modification'\n+4A44F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4A453 LOCAL HEADER #101     04034B50 (67324752)\n+4A457 Extract Zip Spec      14 (20) '2.0'\n+4A458 Extract OS            00 (0) 'MS-DOS'\n+4A459 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4A45B Compression Method    0000 (0) 'Stored'\n+4A45D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4A461 CRC                   00000000 (0)\n+4A465 Compressed Size       00000000 (0)\n+4A469 Uncompressed Size     00000000 (0)\n+4A46D Filename Length       0033 (51)\n+4A46F Extra Length          0009 (9)\n+4A471 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4A471: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4A4A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4A4A6   Length              0005 (5)\n+4A4A8   Flags               01 (1) 'Modification'\n+4A4A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+4A4AD PAYLOAD\n+\n+4ACF9 DATA DESCRIPTOR       08074B50 (134695760)\n+4ACFD CRC                   776F6B16 (2003790614)\n+4AD01 Compressed Size       0000084C (2124)\n+4AD05 Uncompressed Size     0000084C (2124)\n+\n+4AD09 LOCAL HEADER #102     04034B50 (67324752)\n+4AD0D Extract Zip Spec      14 (20) '2.0'\n+4AD0E Extract OS            00 (0) 'MS-DOS'\n+4AD0F General Purpose Flag  0000 (0)\n+4AD11 Compression Method    0000 (0) 'Stored'\n+4AD13 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4AD17 CRC                   00000000 (0)\n+4AD1B Compressed Size       00000000 (0)\n+4AD1F Uncompressed Size     00000000 (0)\n+4AD23 Filename Length       0023 (35)\n+4AD25 Extra Length          0009 (9)\n+4AD27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4AD27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4AD4A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4AD4C   Length              0005 (5)\n+4AD4E   Flags               01 (1) 'Modification'\n+4AD4F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4AD53 LOCAL HEADER #103     04034B50 (67324752)\n+4AD57 Extract Zip Spec      14 (20) '2.0'\n+4AD58 Extract OS            00 (0) 'MS-DOS'\n+4AD59 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4AD5B Compression Method    0000 (0) 'Stored'\n+4AD5D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4AD61 CRC                   00000000 (0)\n+4AD65 Compressed Size       00000000 (0)\n+4AD69 Uncompressed Size     00000000 (0)\n+4AD6D Filename Length       003F (63)\n+4AD6F Extra Length          0009 (9)\n+4AD71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4AD71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4ADB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4ADB2   Length              0005 (5)\n+4ADB4   Flags               01 (1) 'Modification'\n+4ADB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+4ADB9 PAYLOAD\n+\n+4C48B DATA DESCRIPTOR       08074B50 (134695760)\n+4C48F CRC                   A1EB5EED (2716557037)\n+4C493 Compressed Size       000016D2 (5842)\n+4C497 Uncompressed Size     000016D2 (5842)\n+\n+4C49B LOCAL HEADER #104     04034B50 (67324752)\n+4C49F Extract Zip Spec      14 (20) '2.0'\n+4C4A0 Extract OS            00 (0) 'MS-DOS'\n+4C4A1 General Purpose Flag  0000 (0)\n+4C4A3 Compression Method    0000 (0) 'Stored'\n+4C4A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4C4A9 CRC                   00000000 (0)\n+4C4AD Compressed Size       00000000 (0)\n+4C4B1 Uncompressed Size     00000000 (0)\n+4C4B5 Filename Length       001D (29)\n+4C4B7 Extra Length          0009 (9)\n+4C4B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4C4B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4C4D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4C4D8   Length              0005 (5)\n+4C4DA   Flags               01 (1) 'Modification'\n+4C4DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+4C4DF LOCAL HEADER #105     04034B50 (67324752)\n+4C4E3 Extract Zip Spec      14 (20) '2.0'\n+4C4E4 Extract OS            00 (0) 'MS-DOS'\n+4C4E5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4C4E7 Compression Method    0000 (0) 'Stored'\n+4C4E9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4C4ED CRC                   00000000 (0)\n+4C4F1 Compressed Size       00000000 (0)\n+4C4F5 Uncompressed Size     00000000 (0)\n+4C4F9 Filename Length       002F (47)\n+4C4FB Extra Length          0009 (9)\n+4C4FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4C4FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4C52C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4C52E   Length              0005 (5)\n+4C530   Flags               01 (1) 'Modification'\n+4C531   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+4C535 PAYLOAD\n+\n+4E535 DATA DESCRIPTOR       08074B50 (134695760)\n+4E539 CRC                   93BDDA62 (2478692962)\n+4E53D Compressed Size       00002000 (8192)\n+4E541 Uncompressed Size     00002000 (8192)\n+\n+4E545 LOCAL HEADER #106     04034B50 (67324752)\n+4E549 Extract Zip Spec      14 (20) '2.0'\n+4E54A Extract OS            00 (0) 'MS-DOS'\n+4E54B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+4E54D Compression Method    0000 (0) 'Stored'\n+4E54F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+4E553 CRC                   00000000 (0)\n+4E557 Compressed Size       00000000 (0)\n+4E55B Uncompressed Size     00000000 (0)\n+4E55F Filename Length       002D (45)\n+4E561 Extra Length          0009 (9)\n+4E563 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x4E563: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+4E590 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+4E592   Length              0005 (5)\n+4E594   Flags               01 (1) 'Modification'\n+4E595   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+4E599 PAYLOAD\n+\n+510EE DATA DESCRIPTOR       08074B50 (134695760)\n+510F2 CRC                   E459791A (3831068954)\n+510F6 Compressed Size       00002B55 (11093)\n+510FA Uncompressed Size     00002B55 (11093)\n+\n+510FE LOCAL HEADER #107     04034B50 (67324752)\n+51102 Extract Zip Spec      14 (20) '2.0'\n+51103 Extract OS            00 (0) 'MS-DOS'\n+51104 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+51106 Compression Method    0000 (0) 'Stored'\n+51108 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5110C CRC                   00000000 (0)\n+51110 Compressed Size       00000000 (0)\n+51114 Uncompressed Size     00000000 (0)\n+51118 Filename Length       002E (46)\n+5111A Extra Length          0009 (9)\n+5111C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5111C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5114A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5114C   Length              0005 (5)\n+5114E   Flags               01 (1) 'Modification'\n+5114F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+51153 PAYLOAD\n+\n+517B1 DATA DESCRIPTOR       08074B50 (134695760)\n+517B5 CRC                   80C30D3D (2160266557)\n+517B9 Compressed Size       0000065E (1630)\n+517BD Uncompressed Size     0000065E (1630)\n+\n+517C1 LOCAL HEADER #108     04034B50 (67324752)\n+517C5 Extract Zip Spec      14 (20) '2.0'\n+517C6 Extract OS            00 (0) 'MS-DOS'\n+517C7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+517C9 Compression Method    0000 (0) 'Stored'\n+517CB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+517CF CRC                   00000000 (0)\n+517D3 Compressed Size       00000000 (0)\n+517D7 Uncompressed Size     00000000 (0)\n+517DB Filename Length       002A (42)\n+517DD Extra Length          0009 (9)\n+517DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x517DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+51809 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5180B   Length              0005 (5)\n+5180D   Flags               01 (1) 'Modification'\n+5180E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+51812 PAYLOAD\n+\n+54459 DATA DESCRIPTOR       08074B50 (134695760)\n+5445D CRC                   8E103737 (2383427383)\n+54461 Compressed Size       00002C47 (11335)\n+54465 Uncompressed Size     00002C47 (11335)\n+\n+54469 CENTRAL HEADER #1     02014B50 (33639248)\n+5446D Created Zip Spec      14 (20) '2.0'\n+5446E Created OS            00 (0) 'MS-DOS'\n+5446F Extract Zip Spec      14 (20) '2.0'\n+54470 Extract OS            00 (0) 'MS-DOS'\n+54471 General Purpose Flag  0000 (0)\n+54473 Compression Method    0000 (0) 'Stored'\n+54475 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54479 CRC                   00000000 (0)\n+5447D Compressed Size       00000000 (0)\n+54481 Uncompressed Size     00000000 (0)\n+54485 Filename Length       0009 (9)\n+54487 Extra Length          0009 (9)\n+54489 Comment Length        0000 (0)\n+5448B Disk Start            0000 (0)\n+5448D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+5448F Ext File Attributes   00000000 (0)\n+54493 Local Header Offset   00000000 (0)\n+54497 Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x54497: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+544A0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+544A2   Length              0005 (5)\n+544A4   Flags               01 (1) 'Modification'\n+544A5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+544A9 CENTRAL HEADER #2     02014B50 (33639248)\n+544AD Created Zip Spec      14 (20) '2.0'\n+544AE Created OS            00 (0) 'MS-DOS'\n+544AF Extract Zip Spec      14 (20) '2.0'\n+544B0 Extract OS            00 (0) 'MS-DOS'\n+544B1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+544B3 Compression Method    0000 (0) 'Stored'\n+544B5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+544B9 CRC                   78DBB6D9 (2027665113)\n+544BD Compressed Size       000009EA (2538)\n+544C1 Uncompressed Size     000009EA (2538)\n+544C5 Filename Length       0015 (21)\n+544C7 Extra Length          0009 (9)\n+544C9 Comment Length        0000 (0)\n+544CB Disk Start            0000 (0)\n+544CD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+544CF Ext File Attributes   00000000 (0)\n+544D3 Local Header Offset   00000030 (48)\n+544D7 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x544D7: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+544EC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+544EE   Length              0005 (5)\n+544F0   Flags               01 (1) 'Modification'\n+544F1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+544F5 CENTRAL HEADER #3     02014B50 (33639248)\n+544F9 Created Zip Spec      14 (20) '2.0'\n+544FA Created OS            00 (0) 'MS-DOS'\n+544FB Extract Zip Spec      14 (20) '2.0'\n+544FC Extract OS            00 (0) 'MS-DOS'\n+544FD General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+544FF Compression Method    0000 (0) 'Stored'\n+54501 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54505 CRC                   86E2B4B4 (2263004340)\n+54509 Compressed Size       00002C5E (11358)\n+5450D Uncompressed Size     00002C5E (11358)\n+54511 Filename Length       0010 (16)\n+54513 Extra Length          0009 (9)\n+54515 Comment Length        0000 (0)\n+54517 Disk Start            0000 (0)\n+54519 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+5451B Ext File Attributes   00000000 (0)\n+5451F Local Header Offset   00000A66 (2662)\n+54523 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54523: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54533 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54535   Length              0005 (5)\n+54537   Flags               01 (1) 'Modification'\n+54538   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5453C CENTRAL HEADER #4     02014B50 (33639248)\n+54540 Created Zip Spec      14 (20) '2.0'\n+54541 Created OS            00 (0) 'MS-DOS'\n+54542 Extract Zip Spec      14 (20) '2.0'\n+54543 Extract OS            00 (0) 'MS-DOS'\n+54544 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54546 Compression Method    0000 (0) 'Stored'\n+54548 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5454C CRC                   EE027FB2 (3993141170)\n+54550 Compressed Size       00000019 (25)\n+54554 Uncompressed Size     00000019 (25)\n+54558 Filename Length       0014 (20)\n+5455A Extra Length          0009 (9)\n+5455C Comment Length        0000 (0)\n+5455E Disk Start            0000 (0)\n+54560 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54562 Ext File Attributes   00000000 (0)\n+54566 Local Header Offset   0000370B (14091)\n+5456A Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5456A: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5457E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54580   Length              0005 (5)\n+54582   Flags               01 (1) 'Modification'\n+54583   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54587 CENTRAL HEADER #5     02014B50 (33639248)\n+5458B Created Zip Spec      14 (20) '2.0'\n+5458C Created OS            00 (0) 'MS-DOS'\n+5458D Extract Zip Spec      14 (20) '2.0'\n+5458E Extract OS            00 (0) 'MS-DOS'\n+5458F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54591 Compression Method    0000 (0) 'Stored'\n+54593 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54597 CRC                   4EE5121F (1323635231)\n+5459B Compressed Size       000000AA (170)\n+5459F Uncompressed Size     000000AA (170)\n+545A3 Filename Length       000F (15)\n+545A5 Extra Length          0009 (9)\n+545A7 Comment Length        0000 (0)\n+545A9 Disk Start            0000 (0)\n+545AB Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+545AD Ext File Attributes   00000000 (0)\n+545B1 Local Header Offset   0000376F (14191)\n+545B5 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x545B5: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+545C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+545C6   Length              0005 (5)\n+545C8   Flags               01 (1) 'Modification'\n+545C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+545CD CENTRAL HEADER #6     02014B50 (33639248)\n+545D1 Created Zip Spec      14 (20) '2.0'\n+545D2 Created OS            00 (0) 'MS-DOS'\n+545D3 Extract Zip Spec      14 (20) '2.0'\n+545D4 Extract OS            00 (0) 'MS-DOS'\n+545D5 General Purpose Flag  0000 (0)\n+545D7 Compression Method    0000 (0) 'Stored'\n+545D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+545DD CRC                   00000000 (0)\n+545E1 Compressed Size       00000000 (0)\n+545E5 Uncompressed Size     00000000 (0)\n+545E9 Filename Length       000F (15)\n+545EB Extra Length          0009 (9)\n+545ED Comment Length        0000 (0)\n+545EF Disk Start            0000 (0)\n+545F1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+545F3 Ext File Attributes   00000000 (0)\n+545F7 Local Header Offset   0000385F (14431)\n+545FB Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x545FB: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5460A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5460C   Length              0005 (5)\n+5460E   Flags               01 (1) 'Modification'\n+5460F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54613 CENTRAL HEADER #7     02014B50 (33639248)\n+54617 Created Zip Spec      14 (20) '2.0'\n+54618 Created OS            00 (0) 'MS-DOS'\n+54619 Extract Zip Spec      14 (20) '2.0'\n+5461A Extract OS            00 (0) 'MS-DOS'\n+5461B General Purpose Flag  0000 (0)\n+5461D Compression Method    0000 (0) 'Stored'\n+5461F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54623 CRC                   00000000 (0)\n+54627 Compressed Size       00000000 (0)\n+5462B Uncompressed Size     00000000 (0)\n+5462F Filename Length       0018 (24)\n+54631 Extra Length          0009 (9)\n+54633 Comment Length        0000 (0)\n+54635 Disk Start            0000 (0)\n+54637 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54639 Ext File Attributes   00000000 (0)\n+5463D Local Header Offset   00003895 (14485)\n+54641 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54641: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54659 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5465B   Length              0005 (5)\n+5465D   Flags               01 (1) 'Modification'\n+5465E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54662 CENTRAL HEADER #8     02014B50 (33639248)\n+54666 Created Zip Spec      14 (20) '2.0'\n+54667 Created OS            00 (0) 'MS-DOS'\n+54668 Extract Zip Spec      14 (20) '2.0'\n+54669 Extract OS            00 (0) 'MS-DOS'\n+5466A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+5466C Compression Method    0000 (0) 'Stored'\n+5466E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54672 CRC                   2F9D6707 (798844679)\n+54676 Compressed Size       00000334 (820)\n+5467A Uncompressed Size     00000334 (820)\n+5467E Filename Length       0033 (51)\n+54680 Extra Length          0009 (9)\n+54682 Comment Length        0000 (0)\n+54684 Disk Start            0000 (0)\n+54686 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54688 Ext File Attributes   00000000 (0)\n+5468C Local Header Offset   000038D4 (14548)\n+54690 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54690: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+546C3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+546C5   Length              0005 (5)\n+546C7   Flags               01 (1) 'Modification'\n+546C8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+546CC CENTRAL HEADER #9     02014B50 (33639248)\n+546D0 Created Zip Spec      14 (20) '2.0'\n+546D1 Created OS            00 (0) 'MS-DOS'\n+546D2 Extract Zip Spec      14 (20) '2.0'\n+546D3 Extract OS            00 (0) 'MS-DOS'\n+546D4 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+546D6 Compression Method    0000 (0) 'Stored'\n+546D8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+546DC CRC                   59884A10 (1502104080)\n+546E0 Compressed Size       00000042 (66)\n+546E4 Uncompressed Size     00000042 (66)\n+546E8 Filename Length       003C (60)\n+546EA Extra Length          0009 (9)\n+546EC Comment Length        0000 (0)\n+546EE Disk Start            0000 (0)\n+546F0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+546F2 Ext File Attributes   00000000 (0)\n+546F6 Local Header Offset   00003C72 (15474)\n+546FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x546FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54736 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54738   Length              0005 (5)\n+5473A   Flags               01 (1) 'Modification'\n+5473B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5473F CENTRAL HEADER #10    02014B50 (33639248)\n+54743 Created Zip Spec      14 (20) '2.0'\n+54744 Created OS            00 (0) 'MS-DOS'\n+54745 Extract Zip Spec      14 (20) '2.0'\n+54746 Extract OS            00 (0) 'MS-DOS'\n+54747 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54749 Compression Method    0000 (0) 'Stored'\n+5474B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5474F CRC                   A08C1C8C (2693536908)\n+54753 Compressed Size       000000AA (170)\n+54757 Uncompressed Size     000000AA (170)\n+5475B Filename Length       0035 (53)\n+5475D Extra Length          0009 (9)\n+5475F Comment Length        0000 (0)\n+54761 Disk Start            0000 (0)\n+54763 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54765 Ext File Attributes   00000000 (0)\n+54769 Local Header Offset   00003D27 (15655)\n+5476D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5476D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+547A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+547A4   Length              0005 (5)\n+547A6   Flags               01 (1) 'Modification'\n+547A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+547AB CENTRAL HEADER #11    02014B50 (33639248)\n+547AF Created Zip Spec      14 (20) '2.0'\n+547B0 Created OS            00 (0) 'MS-DOS'\n+547B1 Extract Zip Spec      14 (20) '2.0'\n+547B2 Extract OS            00 (0) 'MS-DOS'\n+547B3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+547B5 Compression Method    0000 (0) 'Stored'\n+547B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+547BB CRC                   B40DDFAC (3020808108)\n+547BF Compressed Size       000000B9 (185)\n+547C3 Uncompressed Size     000000B9 (185)\n+547C7 Filename Length       0039 (57)\n+547C9 Extra Length          0009 (9)\n+547CB Comment Length        0000 (0)\n+547CD Disk Start            0000 (0)\n+547CF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+547D1 Ext File Attributes   00000000 (0)\n+547D5 Local Header Offset   00003E3D (15933)\n+547D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x547D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54812 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54814   Length              0005 (5)\n+54816   Flags               01 (1) 'Modification'\n+54817   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5481B CENTRAL HEADER #12    02014B50 (33639248)\n+5481F Created Zip Spec      14 (20) '2.0'\n+54820 Created OS            00 (0) 'MS-DOS'\n+54821 Extract Zip Spec      14 (20) '2.0'\n+54822 Extract OS            00 (0) 'MS-DOS'\n+54823 General Purpose Flag  0000 (0)\n+54825 Compression Method    0000 (0) 'Stored'\n+54827 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5482B CRC                   00000000 (0)\n+5482F Compressed Size       00000000 (0)\n+54833 Uncompressed Size     00000000 (0)\n+54837 Filename Length       000F (15)\n+54839 Extra Length          0009 (9)\n+5483B Comment Length        0000 (0)\n+5483D Disk Start            0000 (0)\n+5483F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54841 Ext File Attributes   00000000 (0)\n+54845 Local Header Offset   00003F66 (16230)\n+54849 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54849: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54858 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5485A   Length              0005 (5)\n+5485C   Flags               01 (1) 'Modification'\n+5485D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54861 CENTRAL HEADER #13    02014B50 (33639248)\n+54865 Created Zip Spec      14 (20) '2.0'\n+54866 Created OS            00 (0) 'MS-DOS'\n+54867 Extract Zip Spec      14 (20) '2.0'\n+54868 Extract OS            00 (0) 'MS-DOS'\n+54869 General Purpose Flag  0000 (0)\n+5486B Compression Method    0000 (0) 'Stored'\n+5486D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54871 CRC                   00000000 (0)\n+54875 Compressed Size       00000000 (0)\n+54879 Uncompressed Size     00000000 (0)\n+5487D Filename Length       0020 (32)\n+5487F Extra Length          0009 (9)\n+54881 Comment Length        0000 (0)\n+54883 Disk Start            0000 (0)\n+54885 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54887 Ext File Attributes   00000000 (0)\n+5488B Local Header Offset   00003F9C (16284)\n+5488F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5488F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+548AF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+548B1   Length              0005 (5)\n+548B3   Flags               01 (1) 'Modification'\n+548B4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+548B8 CENTRAL HEADER #14    02014B50 (33639248)\n+548BC Created Zip Spec      14 (20) '2.0'\n+548BD Created OS            00 (0) 'MS-DOS'\n+548BE Extract Zip Spec      14 (20) '2.0'\n+548BF Extract OS            00 (0) 'MS-DOS'\n+548C0 General Purpose Flag  0000 (0)\n+548C2 Compression Method    0000 (0) 'Stored'\n+548C4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+548C8 CRC                   00000000 (0)\n+548CC Compressed Size       00000000 (0)\n+548D0 Uncompressed Size     00000000 (0)\n+548D4 Filename Length       002E (46)\n+548D6 Extra Length          0009 (9)\n+548D8 Comment Length        0000 (0)\n+548DA Disk Start            0000 (0)\n+548DC Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+548DE Ext File Attributes   00000000 (0)\n+548E2 Local Header Offset   00003FE3 (16355)\n+548E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x548E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54914 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54916   Length              0005 (5)\n+54918   Flags               01 (1) 'Modification'\n+54919   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5491D CENTRAL HEADER #15    02014B50 (33639248)\n+54921 Created Zip Spec      14 (20) '2.0'\n+54922 Created OS            00 (0) 'MS-DOS'\n+54923 Extract Zip Spec      14 (20) '2.0'\n+54924 Extract OS            00 (0) 'MS-DOS'\n+54925 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54927 Compression Method    0000 (0) 'Stored'\n+54929 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5492D CRC                   00000000 (0)\n+54931 Compressed Size       00000000 (0)\n+54935 Uncompressed Size     00000000 (0)\n+54939 Filename Length       003C (60)\n+5493B Extra Length          0009 (9)\n+5493D Comment Length        0000 (0)\n+5493F Disk Start            0000 (0)\n+54941 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54943 Ext File Attributes   00000000 (0)\n+54947 Local Header Offset   00004038 (16440)\n+5494B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5494B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54987 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54989   Length              0005 (5)\n+5498B   Flags               01 (1) 'Modification'\n+5498C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54990 CENTRAL HEADER #16    02014B50 (33639248)\n+54994 Created Zip Spec      14 (20) '2.0'\n+54995 Created OS            00 (0) 'MS-DOS'\n+54996 Extract Zip Spec      14 (20) '2.0'\n+54997 Extract OS            00 (0) 'MS-DOS'\n+54998 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+5499A Compression Method    0000 (0) 'Stored'\n+5499C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+549A0 CRC                   A1CBD481 (2714489985)\n+549A4 Compressed Size       00000971 (2417)\n+549A8 Uncompressed Size     00000971 (2417)\n+549AC Filename Length       0035 (53)\n+549AE Extra Length          0009 (9)\n+549B0 Comment Length        0000 (0)\n+549B2 Disk Start            0000 (0)\n+549B4 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+549B6 Ext File Attributes   00000000 (0)\n+549BA Local Header Offset   000040AB (16555)\n+549BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x549BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+549F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+549F5   Length              0005 (5)\n+549F7   Flags               01 (1) 'Modification'\n+549F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+549FC CENTRAL HEADER #17    02014B50 (33639248)\n+54A00 Created Zip Spec      14 (20) '2.0'\n+54A01 Created OS            00 (0) 'MS-DOS'\n+54A02 Extract Zip Spec      14 (20) '2.0'\n+54A03 Extract OS            00 (0) 'MS-DOS'\n+54A04 General Purpose Flag  0000 (0)\n+54A06 Compression Method    0000 (0) 'Stored'\n+54A08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54A0C CRC                   00000000 (0)\n+54A10 Compressed Size       00000000 (0)\n+54A14 Uncompressed Size     00000000 (0)\n+54A18 Filename Length       0004 (4)\n+54A1A Extra Length          0009 (9)\n+54A1C Comment Length        0000 (0)\n+54A1E Disk Start            0000 (0)\n+54A20 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54A22 Ext File Attributes   00000000 (0)\n+54A26 Local Header Offset   00004A88 (19080)\n+54A2A Filename              'XXXX'\n+#\n+# WARNING: Offset 0x54A2A: Filename 'XXXX'\n+#          Zero length filename\n+#\n+54A2E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54A30   Length              0005 (5)\n+54A32   Flags               01 (1) 'Modification'\n+54A33   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54A37 CENTRAL HEADER #18    02014B50 (33639248)\n+54A3B Created Zip Spec      14 (20) '2.0'\n+54A3C Created OS            00 (0) 'MS-DOS'\n+54A3D Extract Zip Spec      14 (20) '2.0'\n+54A3E Extract OS            00 (0) 'MS-DOS'\n+54A3F General Purpose Flag  0000 (0)\n+54A41 Compression Method    0000 (0) 'Stored'\n+54A43 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54A47 CRC                   00000000 (0)\n+54A4B Compressed Size       00000000 (0)\n+54A4F Uncompressed Size     00000000 (0)\n+54A53 Filename Length       000C (12)\n+54A55 Extra Length          0009 (9)\n+54A57 Comment Length        0000 (0)\n+54A59 Disk Start            0000 (0)\n+54A5B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54A5D Ext File Attributes   00000000 (0)\n+54A61 Local Header Offset   00004AB3 (19123)\n+54A65 Filename              'XXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54A65: Filename 'XXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54A71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54A73   Length              0005 (5)\n+54A75   Flags               01 (1) 'Modification'\n+54A76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54A7A CENTRAL HEADER #19    02014B50 (33639248)\n+54A7E Created Zip Spec      14 (20) '2.0'\n+54A7F Created OS            00 (0) 'MS-DOS'\n+54A80 Extract Zip Spec      14 (20) '2.0'\n+54A81 Extract OS            00 (0) 'MS-DOS'\n+54A82 General Purpose Flag  0000 (0)\n+54A84 Compression Method    0000 (0) 'Stored'\n+54A86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54A8A CRC                   00000000 (0)\n+54A8E Compressed Size       00000000 (0)\n+54A92 Uncompressed Size     00000000 (0)\n+54A96 Filename Length       0012 (18)\n+54A98 Extra Length          0009 (9)\n+54A9A Comment Length        0000 (0)\n+54A9C Disk Start            0000 (0)\n+54A9E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54AA0 Ext File Attributes   00000000 (0)\n+54AA4 Local Header Offset   00004AE6 (19174)\n+54AA8 Filename              'XXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54AA8: Filename 'XXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54ABA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54ABC   Length              0005 (5)\n+54ABE   Flags               01 (1) 'Modification'\n+54ABF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54AC3 CENTRAL HEADER #20    02014B50 (33639248)\n+54AC7 Created Zip Spec      14 (20) '2.0'\n+54AC8 Created OS            00 (0) 'MS-DOS'\n+54AC9 Extract Zip Spec      14 (20) '2.0'\n+54ACA Extract OS            00 (0) 'MS-DOS'\n+54ACB General Purpose Flag  0000 (0)\n+54ACD Compression Method    0000 (0) 'Stored'\n+54ACF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54AD3 CRC                   00000000 (0)\n+54AD7 Compressed Size       00000000 (0)\n+54ADB Uncompressed Size     00000000 (0)\n+54ADF Filename Length       0016 (22)\n+54AE1 Extra Length          0009 (9)\n+54AE3 Comment Length        0000 (0)\n+54AE5 Disk Start            0000 (0)\n+54AE7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54AE9 Ext File Attributes   00000000 (0)\n+54AED Local Header Offset   00004B1F (19231)\n+54AF1 Filename              'XXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54AF1: Filename 'XXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54B07 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54B09   Length              0005 (5)\n+54B0B   Flags               01 (1) 'Modification'\n+54B0C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54B10 CENTRAL HEADER #21    02014B50 (33639248)\n+54B14 Created Zip Spec      14 (20) '2.0'\n+54B15 Created OS            00 (0) 'MS-DOS'\n+54B16 Extract Zip Spec      14 (20) '2.0'\n+54B17 Extract OS            00 (0) 'MS-DOS'\n+54B18 General Purpose Flag  0000 (0)\n+54B1A Compression Method    0000 (0) 'Stored'\n+54B1C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54B20 CRC                   00000000 (0)\n+54B24 Compressed Size       00000000 (0)\n+54B28 Uncompressed Size     00000000 (0)\n+54B2C Filename Length       001E (30)\n+54B2E Extra Length          0009 (9)\n+54B30 Comment Length        0000 (0)\n+54B32 Disk Start            0000 (0)\n+54B34 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54B36 Ext File Attributes   00000000 (0)\n+54B3A Local Header Offset   00004B5C (19292)\n+54B3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54B3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54B5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54B5E   Length              0005 (5)\n+54B60   Flags               01 (1) 'Modification'\n+54B61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54B65 CENTRAL HEADER #22    02014B50 (33639248)\n+54B69 Created Zip Spec      14 (20) '2.0'\n+54B6A Created OS            00 (0) 'MS-DOS'\n+54B6B Extract Zip Spec      14 (20) '2.0'\n+54B6C Extract OS            00 (0) 'MS-DOS'\n+54B6D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54B6F Compression Method    0000 (0) 'Stored'\n+54B71 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54B75 CRC                   00900547 (9438535)\n+54B79 Compressed Size       000003BF (959)\n+54B7D Uncompressed Size     000003BF (959)\n+54B81 Filename Length       002E (46)\n+54B83 Extra Length          0009 (9)\n+54B85 Comment Length        0000 (0)\n+54B87 Disk Start            0000 (0)\n+54B89 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54B8B Ext File Attributes   00000000 (0)\n+54B8F Local Header Offset   00004BA1 (19361)\n+54B93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54B93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54BC1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54BC3   Length              0005 (5)\n+54BC5   Flags               01 (1) 'Modification'\n+54BC6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54BCA CENTRAL HEADER #23    02014B50 (33639248)\n+54BCE Created Zip Spec      14 (20) '2.0'\n+54BCF Created OS            00 (0) 'MS-DOS'\n+54BD0 Extract Zip Spec      14 (20) '2.0'\n+54BD1 Extract OS            00 (0) 'MS-DOS'\n+54BD2 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54BD4 Compression Method    0000 (0) 'Stored'\n+54BD6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54BDA CRC                   1D274B23 (489114403)\n+54BDE Compressed Size       000007EC (2028)\n+54BE2 Uncompressed Size     000007EC (2028)\n+54BE6 Filename Length       0033 (51)\n+54BE8 Extra Length          0009 (9)\n+54BEA Comment Length        0000 (0)\n+54BEC Disk Start            0000 (0)\n+54BEE Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54BF0 Ext File Attributes   00000000 (0)\n+54BF4 Local Header Offset   00004FC5 (20421)\n+54BF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54BF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54C2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54C2D   Length              0005 (5)\n+54C2F   Flags               01 (1) 'Modification'\n+54C30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54C34 CENTRAL HEADER #24    02014B50 (33639248)\n+54C38 Created Zip Spec      14 (20) '2.0'\n+54C39 Created OS            00 (0) 'MS-DOS'\n+54C3A Extract Zip Spec      14 (20) '2.0'\n+54C3B Extract OS            00 (0) 'MS-DOS'\n+54C3C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54C3E Compression Method    0000 (0) 'Stored'\n+54C40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54C44 CRC                   C514DA82 (3306478210)\n+54C48 Compressed Size       00000465 (1125)\n+54C4C Uncompressed Size     00000465 (1125)\n+54C50 Filename Length       0031 (49)\n+54C52 Extra Length          0009 (9)\n+54C54 Comment Length        0000 (0)\n+54C56 Disk Start            0000 (0)\n+54C58 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54C5A Ext File Attributes   00000000 (0)\n+54C5E Local Header Offset   0000581B (22555)\n+54C62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54C62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54C93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54C95   Length              0005 (5)\n+54C97   Flags               01 (1) 'Modification'\n+54C98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54C9C CENTRAL HEADER #25    02014B50 (33639248)\n+54CA0 Created Zip Spec      14 (20) '2.0'\n+54CA1 Created OS            00 (0) 'MS-DOS'\n+54CA2 Extract Zip Spec      14 (20) '2.0'\n+54CA3 Extract OS            00 (0) 'MS-DOS'\n+54CA4 General Purpose Flag  0000 (0)\n+54CA6 Compression Method    0000 (0) 'Stored'\n+54CA8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54CAC CRC                   00000000 (0)\n+54CB0 Compressed Size       00000000 (0)\n+54CB4 Uncompressed Size     00000000 (0)\n+54CB8 Filename Length       0004 (4)\n+54CBA Extra Length          0009 (9)\n+54CBC Comment Length        0000 (0)\n+54CBE Disk Start            0000 (0)\n+54CC0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54CC2 Ext File Attributes   00000000 (0)\n+54CC6 Local Header Offset   00005CE8 (23784)\n+54CCA Filename              'XXXX'\n+#\n+# WARNING: Offset 0x54CCA: Filename 'XXXX'\n+#          Zero length filename\n+#\n+54CCE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54CD0   Length              0005 (5)\n+54CD2   Flags               01 (1) 'Modification'\n+54CD3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54CD7 CENTRAL HEADER #26    02014B50 (33639248)\n+54CDB Created Zip Spec      14 (20) '2.0'\n+54CDC Created OS            00 (0) 'MS-DOS'\n+54CDD Extract Zip Spec      14 (20) '2.0'\n+54CDE Extract OS            00 (0) 'MS-DOS'\n+54CDF General Purpose Flag  0000 (0)\n+54CE1 Compression Method    0000 (0) 'Stored'\n+54CE3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54CE7 CRC                   00000000 (0)\n+54CEB Compressed Size       00000000 (0)\n+54CEF Uncompressed Size     00000000 (0)\n+54CF3 Filename Length       000B (11)\n+54CF5 Extra Length          0009 (9)\n+54CF7 Comment Length        0000 (0)\n+54CF9 Disk Start            0000 (0)\n+54CFB Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54CFD Ext File Attributes   00000000 (0)\n+54D01 Local Header Offset   00005D13 (23827)\n+54D05 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54D05: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54D10 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54D12   Length              0005 (5)\n+54D14   Flags               01 (1) 'Modification'\n+54D15   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54D19 CENTRAL HEADER #27    02014B50 (33639248)\n+54D1D Created Zip Spec      14 (20) '2.0'\n+54D1E Created OS            00 (0) 'MS-DOS'\n+54D1F Extract Zip Spec      14 (20) '2.0'\n+54D20 Extract OS            00 (0) 'MS-DOS'\n+54D21 General Purpose Flag  0000 (0)\n+54D23 Compression Method    0000 (0) 'Stored'\n+54D25 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54D29 CRC                   00000000 (0)\n+54D2D Compressed Size       00000000 (0)\n+54D31 Uncompressed Size     00000000 (0)\n+54D35 Filename Length       0011 (17)\n+54D37 Extra Length          0009 (9)\n+54D39 Comment Length        0000 (0)\n+54D3B Disk Start            0000 (0)\n+54D3D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54D3F Ext File Attributes   00000000 (0)\n+54D43 Local Header Offset   00005D45 (23877)\n+54D47 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54D47: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54D58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54D5A   Length              0005 (5)\n+54D5C   Flags               01 (1) 'Modification'\n+54D5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54D61 CENTRAL HEADER #28    02014B50 (33639248)\n+54D65 Created Zip Spec      14 (20) '2.0'\n+54D66 Created OS            00 (0) 'MS-DOS'\n+54D67 Extract Zip Spec      14 (20) '2.0'\n+54D68 Extract OS            00 (0) 'MS-DOS'\n+54D69 General Purpose Flag  0000 (0)\n+54D6B Compression Method    0000 (0) 'Stored'\n+54D6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54D71 CRC                   00000000 (0)\n+54D75 Compressed Size       00000000 (0)\n+54D79 Uncompressed Size     00000000 (0)\n+54D7D Filename Length       0015 (21)\n+54D7F Extra Length          0009 (9)\n+54D81 Comment Length        0000 (0)\n+54D83 Disk Start            0000 (0)\n+54D85 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54D87 Ext File Attributes   00000000 (0)\n+54D8B Local Header Offset   00005D7D (23933)\n+54D8F Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54D8F: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54DA4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54DA6   Length              0005 (5)\n+54DA8   Flags               01 (1) 'Modification'\n+54DA9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54DAD CENTRAL HEADER #29    02014B50 (33639248)\n+54DB1 Created Zip Spec      14 (20) '2.0'\n+54DB2 Created OS            00 (0) 'MS-DOS'\n+54DB3 Extract Zip Spec      14 (20) '2.0'\n+54DB4 Extract OS            00 (0) 'MS-DOS'\n+54DB5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54DB7 Compression Method    0000 (0) 'Stored'\n+54DB9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54DBD CRC                   58855C59 (1485134937)\n+54DC1 Compressed Size       00001F83 (8067)\n+54DC5 Uncompressed Size     00001F83 (8067)\n+54DC9 Filename Length       0025 (37)\n+54DCB Extra Length          0009 (9)\n+54DCD Comment Length        0000 (0)\n+54DCF Disk Start            0000 (0)\n+54DD1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54DD3 Ext File Attributes   00000000 (0)\n+54DD7 Local Header Offset   00005DB9 (23993)\n+54DDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54DDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54E00 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54E02   Length              0005 (5)\n+54E04   Flags               01 (1) 'Modification'\n+54E05   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54E09 CENTRAL HEADER #30    02014B50 (33639248)\n+54E0D Created Zip Spec      14 (20) '2.0'\n+54E0E Created OS            00 (0) 'MS-DOS'\n+54E0F Extract Zip Spec      14 (20) '2.0'\n+54E10 Extract OS            00 (0) 'MS-DOS'\n+54E11 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54E13 Compression Method    0000 (0) 'Stored'\n+54E15 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54E19 CRC                   16C36050 (381902928)\n+54E1D Compressed Size       00000A30 (2608)\n+54E21 Uncompressed Size     00000A30 (2608)\n+54E25 Filename Length       0026 (38)\n+54E27 Extra Length          0009 (9)\n+54E29 Comment Length        0000 (0)\n+54E2B Disk Start            0000 (0)\n+54E2D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54E2F Ext File Attributes   00000000 (0)\n+54E33 Local Header Offset   00007D98 (32152)\n+54E37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54E37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54E5D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54E5F   Length              0005 (5)\n+54E61   Flags               01 (1) 'Modification'\n+54E62   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54E66 CENTRAL HEADER #31    02014B50 (33639248)\n+54E6A Created Zip Spec      14 (20) '2.0'\n+54E6B Created OS            00 (0) 'MS-DOS'\n+54E6C Extract Zip Spec      14 (20) '2.0'\n+54E6D Extract OS            00 (0) 'MS-DOS'\n+54E6E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54E70 Compression Method    0000 (0) 'Stored'\n+54E72 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54E76 CRC                   28FBE016 (687595542)\n+54E7A Compressed Size       00000A76 (2678)\n+54E7E Uncompressed Size     00000A76 (2678)\n+54E82 Filename Length       002A (42)\n+54E84 Extra Length          0009 (9)\n+54E86 Comment Length        0000 (0)\n+54E88 Disk Start            0000 (0)\n+54E8A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54E8C Ext File Attributes   00000000 (0)\n+54E90 Local Header Offset   00008825 (34853)\n+54E94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54E94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54EBE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54EC0   Length              0005 (5)\n+54EC2   Flags               01 (1) 'Modification'\n+54EC3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54EC7 CENTRAL HEADER #32    02014B50 (33639248)\n+54ECB Created Zip Spec      14 (20) '2.0'\n+54ECC Created OS            00 (0) 'MS-DOS'\n+54ECD Extract Zip Spec      14 (20) '2.0'\n+54ECE Extract OS            00 (0) 'MS-DOS'\n+54ECF General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54ED1 Compression Method    0000 (0) 'Stored'\n+54ED3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54ED7 CRC                   18D15EB0 (416374448)\n+54EDB Compressed Size       00003175 (12661)\n+54EDF Uncompressed Size     00003175 (12661)\n+54EE3 Filename Length       0028 (40)\n+54EE5 Extra Length          0009 (9)\n+54EE7 Comment Length        0000 (0)\n+54EE9 Disk Start            0000 (0)\n+54EEB Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54EED Ext File Attributes   00000000 (0)\n+54EF1 Local Header Offset   000092FC (37628)\n+54EF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54EF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54F1D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54F1F   Length              0005 (5)\n+54F21   Flags               01 (1) 'Modification'\n+54F22   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54F26 CENTRAL HEADER #33    02014B50 (33639248)\n+54F2A Created Zip Spec      14 (20) '2.0'\n+54F2B Created OS            00 (0) 'MS-DOS'\n+54F2C Extract Zip Spec      14 (20) '2.0'\n+54F2D Extract OS            00 (0) 'MS-DOS'\n+54F2E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54F30 Compression Method    0000 (0) 'Stored'\n+54F32 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54F36 CRC                   C1E775CF (3253171663)\n+54F3A Compressed Size       000009AF (2479)\n+54F3E Uncompressed Size     000009AF (2479)\n+54F42 Filename Length       002C (44)\n+54F44 Extra Length          0009 (9)\n+54F46 Comment Length        0000 (0)\n+54F48 Disk Start            0000 (0)\n+54F4A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54F4C Ext File Attributes   00000000 (0)\n+54F50 Local Header Offset   0000C4D0 (50384)\n+54F54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54F54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54F80 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54F82   Length              0005 (5)\n+54F84   Flags               01 (1) 'Modification'\n+54F85   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54F89 CENTRAL HEADER #34    02014B50 (33639248)\n+54F8D Created Zip Spec      14 (20) '2.0'\n+54F8E Created OS            00 (0) 'MS-DOS'\n+54F8F Extract Zip Spec      14 (20) '2.0'\n+54F90 Extract OS            00 (0) 'MS-DOS'\n+54F91 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54F93 Compression Method    0000 (0) 'Stored'\n+54F95 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54F99 CRC                   7E97C5F2 (2123875826)\n+54F9D Compressed Size       00000A79 (2681)\n+54FA1 Uncompressed Size     00000A79 (2681)\n+54FA5 Filename Length       0023 (35)\n+54FA7 Extra Length          0009 (9)\n+54FA9 Comment Length        0000 (0)\n+54FAB Disk Start            0000 (0)\n+54FAD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+54FAF Ext File Attributes   00000000 (0)\n+54FB3 Local Header Offset   0000CEE2 (52962)\n+54FB7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54FB7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+54FDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+54FDC   Length              0005 (5)\n+54FDE   Flags               01 (1) 'Modification'\n+54FDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+54FE3 CENTRAL HEADER #35    02014B50 (33639248)\n+54FE7 Created Zip Spec      14 (20) '2.0'\n+54FE8 Created OS            00 (0) 'MS-DOS'\n+54FE9 Extract Zip Spec      14 (20) '2.0'\n+54FEA Extract OS            00 (0) 'MS-DOS'\n+54FEB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+54FED Compression Method    0000 (0) 'Stored'\n+54FEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+54FF3 CRC                   525AF459 (1381692505)\n+54FF7 Compressed Size       0000053F (1343)\n+54FFB Uncompressed Size     0000053F (1343)\n+54FFF Filename Length       0022 (34)\n+55001 Extra Length          0009 (9)\n+55003 Comment Length        0000 (0)\n+55005 Disk Start            0000 (0)\n+55007 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55009 Ext File Attributes   00000000 (0)\n+5500D Local Header Offset   0000D9B5 (55733)\n+55011 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55011: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55033 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55035   Length              0005 (5)\n+55037   Flags               01 (1) 'Modification'\n+55038   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5503C CENTRAL HEADER #36    02014B50 (33639248)\n+55040 Created Zip Spec      14 (20) '2.0'\n+55041 Created OS            00 (0) 'MS-DOS'\n+55042 Extract Zip Spec      14 (20) '2.0'\n+55043 Extract OS            00 (0) 'MS-DOS'\n+55044 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55046 Compression Method    0000 (0) 'Stored'\n+55048 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5504C CRC                   FC32E707 (4231194375)\n+55050 Compressed Size       000005AC (1452)\n+55054 Uncompressed Size     000005AC (1452)\n+55058 Filename Length       002A (42)\n+5505A Extra Length          0009 (9)\n+5505C Comment Length        0000 (0)\n+5505E Disk Start            0000 (0)\n+55060 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55062 Ext File Attributes   00000000 (0)\n+55066 Local Header Offset   0000DF4D (57165)\n+5506A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5506A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55094 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55096   Length              0005 (5)\n+55098   Flags               01 (1) 'Modification'\n+55099   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5509D CENTRAL HEADER #37    02014B50 (33639248)\n+550A1 Created Zip Spec      14 (20) '2.0'\n+550A2 Created OS            00 (0) 'MS-DOS'\n+550A3 Extract Zip Spec      14 (20) '2.0'\n+550A4 Extract OS            00 (0) 'MS-DOS'\n+550A5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+550A7 Compression Method    0000 (0) 'Stored'\n+550A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+550AD CRC                   2EDA0DE9 (786042345)\n+550B1 Compressed Size       00000965 (2405)\n+550B5 Uncompressed Size     00000965 (2405)\n+550B9 Filename Length       0020 (32)\n+550BB Extra Length          0009 (9)\n+550BD Comment Length        0000 (0)\n+550BF Disk Start            0000 (0)\n+550C1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+550C3 Ext File Attributes   00000000 (0)\n+550C7 Local Header Offset   0000E55A (58714)\n+550CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x550CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+550EB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+550ED   Length              0005 (5)\n+550EF   Flags               01 (1) 'Modification'\n+550F0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+550F4 CENTRAL HEADER #38    02014B50 (33639248)\n+550F8 Created Zip Spec      14 (20) '2.0'\n+550F9 Created OS            00 (0) 'MS-DOS'\n+550FA Extract Zip Spec      14 (20) '2.0'\n+550FB Extract OS            00 (0) 'MS-DOS'\n+550FC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+550FE Compression Method    0000 (0) 'Stored'\n+55100 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55104 CRC                   F67FCDE8 (4135570920)\n+55108 Compressed Size       00000FE9 (4073)\n+5510C Uncompressed Size     00000FE9 (4073)\n+55110 Filename Length       0027 (39)\n+55112 Extra Length          0009 (9)\n+55114 Comment Length        0000 (0)\n+55116 Disk Start            0000 (0)\n+55118 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+5511A Ext File Attributes   00000000 (0)\n+5511E Local Header Offset   0000EF16 (61206)\n+55122 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55122: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55149 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5514B   Length              0005 (5)\n+5514D   Flags               01 (1) 'Modification'\n+5514E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55152 CENTRAL HEADER #39    02014B50 (33639248)\n+55156 Created Zip Spec      14 (20) '2.0'\n+55157 Created OS            00 (0) 'MS-DOS'\n+55158 Extract Zip Spec      14 (20) '2.0'\n+55159 Extract OS            00 (0) 'MS-DOS'\n+5515A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+5515C Compression Method    0000 (0) 'Stored'\n+5515E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55162 CRC                   E5052367 (3842319207)\n+55166 Compressed Size       00000F2D (3885)\n+5516A Uncompressed Size     00000F2D (3885)\n+5516E Filename Length       0024 (36)\n+55170 Extra Length          0009 (9)\n+55172 Comment Length        0000 (0)\n+55174 Disk Start            0000 (0)\n+55176 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55178 Ext File Attributes   00000000 (0)\n+5517C Local Header Offset   0000FF5D (65373)\n+55180 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55180: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+551A4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+551A6   Length              0005 (5)\n+551A8   Flags               01 (1) 'Modification'\n+551A9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+551AD CENTRAL HEADER #40    02014B50 (33639248)\n+551B1 Created Zip Spec      14 (20) '2.0'\n+551B2 Created OS            00 (0) 'MS-DOS'\n+551B3 Extract Zip Spec      14 (20) '2.0'\n+551B4 Extract OS            00 (0) 'MS-DOS'\n+551B5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+551B7 Compression Method    0000 (0) 'Stored'\n+551B9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+551BD CRC                   1A821C29 (444734505)\n+551C1 Compressed Size       0000038E (910)\n+551C5 Uncompressed Size     0000038E (910)\n+551C9 Filename Length       0024 (36)\n+551CB Extra Length          0009 (9)\n+551CD Comment Length        0000 (0)\n+551CF Disk Start            0000 (0)\n+551D1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+551D3 Ext File Attributes   00000000 (0)\n+551D7 Local Header Offset   00010EE5 (69349)\n+551DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x551DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+551FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55201   Length              0005 (5)\n+55203   Flags               01 (1) 'Modification'\n+55204   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55208 CENTRAL HEADER #41    02014B50 (33639248)\n+5520C Created Zip Spec      14 (20) '2.0'\n+5520D Created OS            00 (0) 'MS-DOS'\n+5520E Extract Zip Spec      14 (20) '2.0'\n+5520F Extract OS            00 (0) 'MS-DOS'\n+55210 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55212 Compression Method    0000 (0) 'Stored'\n+55214 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55218 CRC                   19B4DE27 (431283751)\n+5521C Compressed Size       000005D1 (1489)\n+55220 Uncompressed Size     000005D1 (1489)\n+55224 Filename Length       0021 (33)\n+55226 Extra Length          0009 (9)\n+55228 Comment Length        0000 (0)\n+5522A Disk Start            0000 (0)\n+5522C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+5522E Ext File Attributes   00000000 (0)\n+55232 Local Header Offset   000112CE (70350)\n+55236 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55236: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55257 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55259   Length              0005 (5)\n+5525B   Flags               01 (1) 'Modification'\n+5525C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55260 CENTRAL HEADER #42    02014B50 (33639248)\n+55264 Created Zip Spec      14 (20) '2.0'\n+55265 Created OS            00 (0) 'MS-DOS'\n+55266 Extract Zip Spec      14 (20) '2.0'\n+55267 Extract OS            00 (0) 'MS-DOS'\n+55268 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+5526A Compression Method    0000 (0) 'Stored'\n+5526C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55270 CRC                   D82F1E47 (3626966599)\n+55274 Compressed Size       0000059A (1434)\n+55278 Uncompressed Size     0000059A (1434)\n+5527C Filename Length       0029 (41)\n+5527E Extra Length          0009 (9)\n+55280 Comment Length        0000 (0)\n+55282 Disk Start            0000 (0)\n+55284 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55286 Ext File Attributes   00000000 (0)\n+5528A Local Header Offset   000118F7 (71927)\n+5528E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5528E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+552B7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+552B9   Length              0005 (5)\n+552BB   Flags               01 (1) 'Modification'\n+552BC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+552C0 CENTRAL HEADER #43    02014B50 (33639248)\n+552C4 Created Zip Spec      14 (20) '2.0'\n+552C5 Created OS            00 (0) 'MS-DOS'\n+552C6 Extract Zip Spec      14 (20) '2.0'\n+552C7 Extract OS            00 (0) 'MS-DOS'\n+552C8 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+552CA Compression Method    0000 (0) 'Stored'\n+552CC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+552D0 CRC                   16B7BD77 (381140343)\n+552D4 Compressed Size       00000805 (2053)\n+552D8 Uncompressed Size     00000805 (2053)\n+552DC Filename Length       002A (42)\n+552DE Extra Length          0009 (9)\n+552E0 Comment Length        0000 (0)\n+552E2 Disk Start            0000 (0)\n+552E4 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+552E6 Ext File Attributes   00000000 (0)\n+552EA Local Header Offset   00011EF1 (73457)\n+552EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x552EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55318 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5531A   Length              0005 (5)\n+5531C   Flags               01 (1) 'Modification'\n+5531D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55321 CENTRAL HEADER #44    02014B50 (33639248)\n+55325 Created Zip Spec      14 (20) '2.0'\n+55326 Created OS            00 (0) 'MS-DOS'\n+55327 Extract Zip Spec      14 (20) '2.0'\n+55328 Extract OS            00 (0) 'MS-DOS'\n+55329 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+5532B Compression Method    0000 (0) 'Stored'\n+5532D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55331 CRC                   CCB43BAA (3434363818)\n+55335 Compressed Size       00000DF0 (3568)\n+55339 Uncompressed Size     00000DF0 (3568)\n+5533D Filename Length       0022 (34)\n+5533F Extra Length          0009 (9)\n+55341 Comment Length        0000 (0)\n+55343 Disk Start            0000 (0)\n+55345 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55347 Ext File Attributes   00000000 (0)\n+5534B Local Header Offset   00012757 (75607)\n+5534F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5534F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55371 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55373   Length              0005 (5)\n+55375   Flags               01 (1) 'Modification'\n+55376   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5537A CENTRAL HEADER #45    02014B50 (33639248)\n+5537E Created Zip Spec      14 (20) '2.0'\n+5537F Created OS            00 (0) 'MS-DOS'\n+55380 Extract Zip Spec      14 (20) '2.0'\n+55381 Extract OS            00 (0) 'MS-DOS'\n+55382 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55384 Compression Method    0000 (0) 'Stored'\n+55386 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5538A CRC                   6D231835 (1831016501)\n+5538E Compressed Size       000005FB (1531)\n+55392 Uncompressed Size     000005FB (1531)\n+55396 Filename Length       0028 (40)\n+55398 Extra Length          0009 (9)\n+5539A Comment Length        0000 (0)\n+5539C Disk Start            0000 (0)\n+5539E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+553A0 Ext File Attributes   00000000 (0)\n+553A4 Local Header Offset   000135A0 (79264)\n+553A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x553A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+553D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+553D2   Length              0005 (5)\n+553D4   Flags               01 (1) 'Modification'\n+553D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+553D9 CENTRAL HEADER #46    02014B50 (33639248)\n+553DD Created Zip Spec      14 (20) '2.0'\n+553DE Created OS            00 (0) 'MS-DOS'\n+553DF Extract Zip Spec      14 (20) '2.0'\n+553E0 Extract OS            00 (0) 'MS-DOS'\n+553E1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+553E3 Compression Method    0000 (0) 'Stored'\n+553E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+553E9 CRC                   2A77FFA2 (712507298)\n+553ED Compressed Size       00000719 (1817)\n+553F1 Uncompressed Size     00000719 (1817)\n+553F5 Filename Length       0026 (38)\n+553F7 Extra Length          0009 (9)\n+553F9 Comment Length        0000 (0)\n+553FB Disk Start            0000 (0)\n+553FD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+553FF Ext File Attributes   00000000 (0)\n+55403 Local Header Offset   00013BFA (80890)\n+55407 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55407: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5542D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5542F   Length              0005 (5)\n+55431   Flags               01 (1) 'Modification'\n+55432   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55436 CENTRAL HEADER #47    02014B50 (33639248)\n+5543A Created Zip Spec      14 (20) '2.0'\n+5543B Created OS            00 (0) 'MS-DOS'\n+5543C Extract Zip Spec      14 (20) '2.0'\n+5543D Extract OS            00 (0) 'MS-DOS'\n+5543E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55440 Compression Method    0000 (0) 'Stored'\n+55442 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55446 CRC                   1DB16B63 (498166627)\n+5544A Compressed Size       000015FD (5629)\n+5544E Uncompressed Size     000015FD (5629)\n+55452 Filename Length       0020 (32)\n+55454 Extra Length          0009 (9)\n+55456 Comment Length        0000 (0)\n+55458 Disk Start            0000 (0)\n+5545A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+5545C Ext File Attributes   00000000 (0)\n+55460 Local Header Offset   00014370 (82800)\n+55464 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55464: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55484 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55486   Length              0005 (5)\n+55488   Flags               01 (1) 'Modification'\n+55489   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5548D CENTRAL HEADER #48    02014B50 (33639248)\n+55491 Created Zip Spec      14 (20) '2.0'\n+55492 Created OS            00 (0) 'MS-DOS'\n+55493 Extract Zip Spec      14 (20) '2.0'\n+55494 Extract OS            00 (0) 'MS-DOS'\n+55495 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55497 Compression Method    0000 (0) 'Stored'\n+55499 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5549D CRC                   3BFD1345 (1006441285)\n+554A1 Compressed Size       0000059E (1438)\n+554A5 Uncompressed Size     0000059E (1438)\n+554A9 Filename Length       0026 (38)\n+554AB Extra Length          0009 (9)\n+554AD Comment Length        0000 (0)\n+554AF Disk Start            0000 (0)\n+554B1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+554B3 Ext File Attributes   00000000 (0)\n+554B7 Local Header Offset   000159C4 (88516)\n+554BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x554BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+554E1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+554E3   Length              0005 (5)\n+554E5   Flags               01 (1) 'Modification'\n+554E6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+554EA CENTRAL HEADER #49    02014B50 (33639248)\n+554EE Created Zip Spec      14 (20) '2.0'\n+554EF Created OS            00 (0) 'MS-DOS'\n+554F0 Extract Zip Spec      14 (20) '2.0'\n+554F1 Extract OS            00 (0) 'MS-DOS'\n+554F2 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+554F4 Compression Method    0000 (0) 'Stored'\n+554F6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+554FA CRC                   C3E7F091 (3286757521)\n+554FE Compressed Size       00005A5D (23133)\n+55502 Uncompressed Size     00005A5D (23133)\n+55506 Filename Length       0024 (36)\n+55508 Extra Length          0009 (9)\n+5550A Comment Length        0000 (0)\n+5550C Disk Start            0000 (0)\n+5550E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55510 Ext File Attributes   00000000 (0)\n+55514 Local Header Offset   00015FBF (90047)\n+55518 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55518: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5553C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5553E   Length              0005 (5)\n+55540   Flags               01 (1) 'Modification'\n+55541   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55545 CENTRAL HEADER #50    02014B50 (33639248)\n+55549 Created Zip Spec      14 (20) '2.0'\n+5554A Created OS            00 (0) 'MS-DOS'\n+5554B Extract Zip Spec      14 (20) '2.0'\n+5554C Extract OS            00 (0) 'MS-DOS'\n+5554D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+5554F Compression Method    0000 (0) 'Stored'\n+55551 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55555 CRC                   CCECA2E4 (3438060260)\n+55559 Compressed Size       00000D97 (3479)\n+5555D Uncompressed Size     00000D97 (3479)\n+55561 Filename Length       0026 (38)\n+55563 Extra Length          0009 (9)\n+55565 Comment Length        0000 (0)\n+55567 Disk Start            0000 (0)\n+55569 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+5556B Ext File Attributes   00000000 (0)\n+5556F Local Header Offset   0001BA77 (113271)\n+55573 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55573: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55599 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5559B   Length              0005 (5)\n+5559D   Flags               01 (1) 'Modification'\n+5559E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+555A2 CENTRAL HEADER #51    02014B50 (33639248)\n+555A6 Created Zip Spec      14 (20) '2.0'\n+555A7 Created OS            00 (0) 'MS-DOS'\n+555A8 Extract Zip Spec      14 (20) '2.0'\n+555A9 Extract OS            00 (0) 'MS-DOS'\n+555AA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+555AC Compression Method    0000 (0) 'Stored'\n+555AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+555B2 CRC                   8DF2CD69 (2381499753)\n+555B6 Compressed Size       00003C43 (15427)\n+555BA Uncompressed Size     00003C43 (15427)\n+555BE Filename Length       0027 (39)\n+555C0 Extra Length          0009 (9)\n+555C2 Comment Length        0000 (0)\n+555C4 Disk Start            0000 (0)\n+555C6 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+555C8 Ext File Attributes   00000000 (0)\n+555CC Local Header Offset   0001C86B (116843)\n+555D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x555D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+555F7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+555F9   Length              0005 (5)\n+555FB   Flags               01 (1) 'Modification'\n+555FC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55600 CENTRAL HEADER #52    02014B50 (33639248)\n+55604 Created Zip Spec      14 (20) '2.0'\n+55605 Created OS            00 (0) 'MS-DOS'\n+55606 Extract Zip Spec      14 (20) '2.0'\n+55607 Extract OS            00 (0) 'MS-DOS'\n+55608 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+5560A Compression Method    0000 (0) 'Stored'\n+5560C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55610 CRC                   B577D739 (3044529977)\n+55614 Compressed Size       0000218E (8590)\n+55618 Uncompressed Size     0000218E (8590)\n+5561C Filename Length       0023 (35)\n+5561E Extra Length          0009 (9)\n+55620 Comment Length        0000 (0)\n+55622 Disk Start            0000 (0)\n+55624 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55626 Ext File Attributes   00000000 (0)\n+5562A Local Header Offset   0002050C (132364)\n+5562E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5562E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55651 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55653   Length              0005 (5)\n+55655   Flags               01 (1) 'Modification'\n+55656   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5565A CENTRAL HEADER #53    02014B50 (33639248)\n+5565E Created Zip Spec      14 (20) '2.0'\n+5565F Created OS            00 (0) 'MS-DOS'\n+55660 Extract Zip Spec      14 (20) '2.0'\n+55661 Extract OS            00 (0) 'MS-DOS'\n+55662 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55664 Compression Method    0000 (0) 'Stored'\n+55666 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5566A CRC                   CDFD7CF6 (3455941878)\n+5566E Compressed Size       00000BBA (3002)\n+55672 Uncompressed Size     00000BBA (3002)\n+55676 Filename Length       002A (42)\n+55678 Extra Length          0009 (9)\n+5567A Comment Length        0000 (0)\n+5567C Disk Start            0000 (0)\n+5567E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55680 Ext File Attributes   00000000 (0)\n+55684 Local Header Offset   000226F4 (141044)\n+55688 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55688: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+556B2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+556B4   Length              0005 (5)\n+556B6   Flags               01 (1) 'Modification'\n+556B7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+556BB CENTRAL HEADER #54    02014B50 (33639248)\n+556BF Created Zip Spec      14 (20) '2.0'\n+556C0 Created OS            00 (0) 'MS-DOS'\n+556C1 Extract Zip Spec      14 (20) '2.0'\n+556C2 Extract OS            00 (0) 'MS-DOS'\n+556C3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+556C5 Compression Method    0000 (0) 'Stored'\n+556C7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+556CB CRC                   32C986CB (852068043)\n+556CF Compressed Size       000004C5 (1221)\n+556D3 Uncompressed Size     000004C5 (1221)\n+556D7 Filename Length       0026 (38)\n+556D9 Extra Length          0009 (9)\n+556DB Comment Length        0000 (0)\n+556DD Disk Start            0000 (0)\n+556DF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+556E1 Ext File Attributes   00000000 (0)\n+556E5 Local Header Offset   0002330F (144143)\n+556E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x556E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5570F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55711   Length              0005 (5)\n+55713   Flags               01 (1) 'Modification'\n+55714   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55718 CENTRAL HEADER #55    02014B50 (33639248)\n+5571C Created Zip Spec      14 (20) '2.0'\n+5571D Created OS            00 (0) 'MS-DOS'\n+5571E Extract Zip Spec      14 (20) '2.0'\n+5571F Extract OS            00 (0) 'MS-DOS'\n+55720 General Purpose Flag  0000 (0)\n+55722 Compression Method    0000 (0) 'Stored'\n+55724 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55728 CRC                   00000000 (0)\n+5572C Compressed Size       00000000 (0)\n+55730 Uncompressed Size     00000000 (0)\n+55734 Filename Length       001C (28)\n+55736 Extra Length          0009 (9)\n+55738 Comment Length        0000 (0)\n+5573A Disk Start            0000 (0)\n+5573C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+5573E Ext File Attributes   00000000 (0)\n+55742 Local Header Offset   00023831 (145457)\n+55746 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55746: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55762 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55764   Length              0005 (5)\n+55766   Flags               01 (1) 'Modification'\n+55767   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5576B CENTRAL HEADER #56    02014B50 (33639248)\n+5576F Created Zip Spec      14 (20) '2.0'\n+55770 Created OS            00 (0) 'MS-DOS'\n+55771 Extract Zip Spec      14 (20) '2.0'\n+55772 Extract OS            00 (0) 'MS-DOS'\n+55773 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55775 Compression Method    0000 (0) 'Stored'\n+55777 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5577B CRC                   9594ED56 (2509565270)\n+5577F Compressed Size       00001E5D (7773)\n+55783 Uncompressed Size     00001E5D (7773)\n+55787 Filename Length       0030 (48)\n+55789 Extra Length          0009 (9)\n+5578B Comment Length        0000 (0)\n+5578D Disk Start            0000 (0)\n+5578F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55791 Ext File Attributes   00000000 (0)\n+55795 Local Header Offset   00023874 (145524)\n+55799 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55799: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+557C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+557CB   Length              0005 (5)\n+557CD   Flags               01 (1) 'Modification'\n+557CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+557D2 CENTRAL HEADER #57    02014B50 (33639248)\n+557D6 Created Zip Spec      14 (20) '2.0'\n+557D7 Created OS            00 (0) 'MS-DOS'\n+557D8 Extract Zip Spec      14 (20) '2.0'\n+557D9 Extract OS            00 (0) 'MS-DOS'\n+557DA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+557DC Compression Method    0000 (0) 'Stored'\n+557DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+557E2 CRC                   B52DE397 (3039683479)\n+557E6 Compressed Size       00001623 (5667)\n+557EA Uncompressed Size     00001623 (5667)\n+557EE Filename Length       0032 (50)\n+557F0 Extra Length          0009 (9)\n+557F2 Comment Length        0000 (0)\n+557F4 Disk Start            0000 (0)\n+557F6 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+557F8 Ext File Attributes   00000000 (0)\n+557FC Local Header Offset   00025738 (153400)\n+55800 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55800: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55832 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55834   Length              0005 (5)\n+55836   Flags               01 (1) 'Modification'\n+55837   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5583B CENTRAL HEADER #58    02014B50 (33639248)\n+5583F Created Zip Spec      14 (20) '2.0'\n+55840 Created OS            00 (0) 'MS-DOS'\n+55841 Extract Zip Spec      14 (20) '2.0'\n+55842 Extract OS            00 (0) 'MS-DOS'\n+55843 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55845 Compression Method    0000 (0) 'Stored'\n+55847 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5584B CRC                   851F3F00 (2233417472)\n+5584F Compressed Size       00000723 (1827)\n+55853 Uncompressed Size     00000723 (1827)\n+55857 Filename Length       0032 (50)\n+55859 Extra Length          0009 (9)\n+5585B Comment Length        0000 (0)\n+5585D Disk Start            0000 (0)\n+5585F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55861 Ext File Attributes   00000000 (0)\n+55865 Local Header Offset   00026DC4 (159172)\n+55869 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55869: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5589B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5589D   Length              0005 (5)\n+5589F   Flags               01 (1) 'Modification'\n+558A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+558A4 CENTRAL HEADER #59    02014B50 (33639248)\n+558A8 Created Zip Spec      14 (20) '2.0'\n+558A9 Created OS            00 (0) 'MS-DOS'\n+558AA Extract Zip Spec      14 (20) '2.0'\n+558AB Extract OS            00 (0) 'MS-DOS'\n+558AC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+558AE Compression Method    0000 (0) 'Stored'\n+558B0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+558B4 CRC                   86FDBE3E (2264776254)\n+558B8 Compressed Size       00000FB9 (4025)\n+558BC Uncompressed Size     00000FB9 (4025)\n+558C0 Filename Length       0031 (49)\n+558C2 Extra Length          0009 (9)\n+558C4 Comment Length        0000 (0)\n+558C6 Disk Start            0000 (0)\n+558C8 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+558CA Ext File Attributes   00000000 (0)\n+558CE Local Header Offset   00027550 (161104)\n+558D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x558D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55903 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55905   Length              0005 (5)\n+55907   Flags               01 (1) 'Modification'\n+55908   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5590C CENTRAL HEADER #60    02014B50 (33639248)\n+55910 Created Zip Spec      14 (20) '2.0'\n+55911 Created OS            00 (0) 'MS-DOS'\n+55912 Extract Zip Spec      14 (20) '2.0'\n+55913 Extract OS            00 (0) 'MS-DOS'\n+55914 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55916 Compression Method    0000 (0) 'Stored'\n+55918 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5591C CRC                   CA71D506 (3396457734)\n+55920 Compressed Size       00000D90 (3472)\n+55924 Uncompressed Size     00000D90 (3472)\n+55928 Filename Length       0036 (54)\n+5592A Extra Length          0009 (9)\n+5592C Comment Length        0000 (0)\n+5592E Disk Start            0000 (0)\n+55930 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55932 Ext File Attributes   00000000 (0)\n+55936 Local Header Offset   00028571 (165233)\n+5593A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5593A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55970 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55972   Length              0005 (5)\n+55974   Flags               01 (1) 'Modification'\n+55975   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55979 CENTRAL HEADER #61    02014B50 (33639248)\n+5597D Created Zip Spec      14 (20) '2.0'\n+5597E Created OS            00 (0) 'MS-DOS'\n+5597F Extract Zip Spec      14 (20) '2.0'\n+55980 Extract OS            00 (0) 'MS-DOS'\n+55981 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55983 Compression Method    0000 (0) 'Stored'\n+55985 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55989 CRC                   B42DC810 (3022899216)\n+5598D Compressed Size       000018CC (6348)\n+55991 Uncompressed Size     000018CC (6348)\n+55995 Filename Length       002E (46)\n+55997 Extra Length          0009 (9)\n+55999 Comment Length        0000 (0)\n+5599B Disk Start            0000 (0)\n+5599D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+5599F Ext File Attributes   00000000 (0)\n+559A3 Local Header Offset   0002936E (168814)\n+559A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x559A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+559D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+559D7   Length              0005 (5)\n+559D9   Flags               01 (1) 'Modification'\n+559DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+559DE CENTRAL HEADER #62    02014B50 (33639248)\n+559E2 Created Zip Spec      14 (20) '2.0'\n+559E3 Created OS            00 (0) 'MS-DOS'\n+559E4 Extract Zip Spec      14 (20) '2.0'\n+559E5 Extract OS            00 (0) 'MS-DOS'\n+559E6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+559E8 Compression Method    0000 (0) 'Stored'\n+559EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+559EE CRC                   5D6B9E17 (1567333911)\n+559F2 Compressed Size       00000CC3 (3267)\n+559F6 Uncompressed Size     00000CC3 (3267)\n+559FA Filename Length       0031 (49)\n+559FC Extra Length          0009 (9)\n+559FE Comment Length        0000 (0)\n+55A00 Disk Start            0000 (0)\n+55A02 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55A04 Ext File Attributes   00000000 (0)\n+55A08 Local Header Offset   0002AC9F (175263)\n+55A0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55A0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55A3D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55A3F   Length              0005 (5)\n+55A41   Flags               01 (1) 'Modification'\n+55A42   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55A46 CENTRAL HEADER #63    02014B50 (33639248)\n+55A4A Created Zip Spec      14 (20) '2.0'\n+55A4B Created OS            00 (0) 'MS-DOS'\n+55A4C Extract Zip Spec      14 (20) '2.0'\n+55A4D Extract OS            00 (0) 'MS-DOS'\n+55A4E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55A50 Compression Method    0000 (0) 'Stored'\n+55A52 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55A56 CRC                   33E95645 (870929989)\n+55A5A Compressed Size       0000073C (1852)\n+55A5E Uncompressed Size     0000073C (1852)\n+55A62 Filename Length       002B (43)\n+55A64 Extra Length          0009 (9)\n+55A66 Comment Length        0000 (0)\n+55A68 Disk Start            0000 (0)\n+55A6A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55A6C Ext File Attributes   00000000 (0)\n+55A70 Local Header Offset   0002B9CA (178634)\n+55A74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55A74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55A9F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55AA1   Length              0005 (5)\n+55AA3   Flags               01 (1) 'Modification'\n+55AA4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55AA8 CENTRAL HEADER #64    02014B50 (33639248)\n+55AAC Created Zip Spec      14 (20) '2.0'\n+55AAD Created OS            00 (0) 'MS-DOS'\n+55AAE Extract Zip Spec      14 (20) '2.0'\n+55AAF Extract OS            00 (0) 'MS-DOS'\n+55AB0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55AB2 Compression Method    0000 (0) 'Stored'\n+55AB4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55AB8 CRC                   DF14BD96 (3742678422)\n+55ABC Compressed Size       000016A6 (5798)\n+55AC0 Uncompressed Size     000016A6 (5798)\n+55AC4 Filename Length       0030 (48)\n+55AC6 Extra Length          0009 (9)\n+55AC8 Comment Length        0000 (0)\n+55ACA Disk Start            0000 (0)\n+55ACC Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55ACE Ext File Attributes   00000000 (0)\n+55AD2 Local Header Offset   0002C168 (180584)\n+55AD6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55AD6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55B06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55B08   Length              0005 (5)\n+55B0A   Flags               01 (1) 'Modification'\n+55B0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55B0F CENTRAL HEADER #65    02014B50 (33639248)\n+55B13 Created Zip Spec      14 (20) '2.0'\n+55B14 Created OS            00 (0) 'MS-DOS'\n+55B15 Extract Zip Spec      14 (20) '2.0'\n+55B16 Extract OS            00 (0) 'MS-DOS'\n+55B17 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55B19 Compression Method    0000 (0) 'Stored'\n+55B1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55B1F CRC                   FA17120C (4195815948)\n+55B23 Compressed Size       00000EE2 (3810)\n+55B27 Uncompressed Size     00000EE2 (3810)\n+55B2B Filename Length       0033 (51)\n+55B2D Extra Length          0009 (9)\n+55B2F Comment Length        0000 (0)\n+55B31 Disk Start            0000 (0)\n+55B33 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55B35 Ext File Attributes   00000000 (0)\n+55B39 Local Header Offset   0002D875 (186485)\n+55B3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55B3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55B70 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55B72   Length              0005 (5)\n+55B74   Flags               01 (1) 'Modification'\n+55B75   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55B79 CENTRAL HEADER #66    02014B50 (33639248)\n+55B7D Created Zip Spec      14 (20) '2.0'\n+55B7E Created OS            00 (0) 'MS-DOS'\n+55B7F Extract Zip Spec      14 (20) '2.0'\n+55B80 Extract OS            00 (0) 'MS-DOS'\n+55B81 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55B83 Compression Method    0000 (0) 'Stored'\n+55B85 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55B89 CRC                   8B21CC44 (2334248004)\n+55B8D Compressed Size       0000343B (13371)\n+55B91 Uncompressed Size     0000343B (13371)\n+55B95 Filename Length       002E (46)\n+55B97 Extra Length          0009 (9)\n+55B99 Comment Length        0000 (0)\n+55B9B Disk Start            0000 (0)\n+55B9D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55B9F Ext File Attributes   00000000 (0)\n+55BA3 Local Header Offset   0002E7C1 (190401)\n+55BA7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55BA7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55BD5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55BD7   Length              0005 (5)\n+55BD9   Flags               01 (1) 'Modification'\n+55BDA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55BDE CENTRAL HEADER #67    02014B50 (33639248)\n+55BE2 Created Zip Spec      14 (20) '2.0'\n+55BE3 Created OS            00 (0) 'MS-DOS'\n+55BE4 Extract Zip Spec      14 (20) '2.0'\n+55BE5 Extract OS            00 (0) 'MS-DOS'\n+55BE6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55BE8 Compression Method    0000 (0) 'Stored'\n+55BEA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55BEE CRC                   BDC74FB9 (3183955897)\n+55BF2 Compressed Size       00002C1E (11294)\n+55BF6 Uncompressed Size     00002C1E (11294)\n+55BFA Filename Length       0032 (50)\n+55BFC Extra Length          0009 (9)\n+55BFE Comment Length        0000 (0)\n+55C00 Disk Start            0000 (0)\n+55C02 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55C04 Ext File Attributes   00000000 (0)\n+55C08 Local Header Offset   00031C61 (203873)\n+55C0C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55C0C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55C3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55C40   Length              0005 (5)\n+55C42   Flags               01 (1) 'Modification'\n+55C43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55C47 CENTRAL HEADER #68    02014B50 (33639248)\n+55C4B Created Zip Spec      14 (20) '2.0'\n+55C4C Created OS            00 (0) 'MS-DOS'\n+55C4D Extract Zip Spec      14 (20) '2.0'\n+55C4E Extract OS            00 (0) 'MS-DOS'\n+55C4F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55C51 Compression Method    0000 (0) 'Stored'\n+55C53 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55C57 CRC                   4BE7E92F (1273489711)\n+55C5B Compressed Size       00000B3B (2875)\n+55C5F Uncompressed Size     00000B3B (2875)\n+55C63 Filename Length       002E (46)\n+55C65 Extra Length          0009 (9)\n+55C67 Comment Length        0000 (0)\n+55C69 Disk Start            0000 (0)\n+55C6B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55C6D Ext File Attributes   00000000 (0)\n+55C71 Local Header Offset   000348E8 (215272)\n+55C75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55C75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55CA3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55CA5   Length              0005 (5)\n+55CA7   Flags               01 (1) 'Modification'\n+55CA8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55CAC CENTRAL HEADER #69    02014B50 (33639248)\n+55CB0 Created Zip Spec      14 (20) '2.0'\n+55CB1 Created OS            00 (0) 'MS-DOS'\n+55CB2 Extract Zip Spec      14 (20) '2.0'\n+55CB3 Extract OS            00 (0) 'MS-DOS'\n+55CB4 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55CB6 Compression Method    0000 (0) 'Stored'\n+55CB8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55CBC CRC                   EE9BE4CE (4003194062)\n+55CC0 Compressed Size       00000A15 (2581)\n+55CC4 Uncompressed Size     00000A15 (2581)\n+55CC8 Filename Length       002C (44)\n+55CCA Extra Length          0009 (9)\n+55CCC Comment Length        0000 (0)\n+55CCE Disk Start            0000 (0)\n+55CD0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55CD2 Ext File Attributes   00000000 (0)\n+55CD6 Local Header Offset   00035488 (218248)\n+55CDA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55CDA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55D06 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55D08   Length              0005 (5)\n+55D0A   Flags               01 (1) 'Modification'\n+55D0B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55D0F CENTRAL HEADER #70    02014B50 (33639248)\n+55D13 Created Zip Spec      14 (20) '2.0'\n+55D14 Created OS            00 (0) 'MS-DOS'\n+55D15 Extract Zip Spec      14 (20) '2.0'\n+55D16 Extract OS            00 (0) 'MS-DOS'\n+55D17 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55D19 Compression Method    0000 (0) 'Stored'\n+55D1B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55D1F CRC                   930DE3AE (2467161006)\n+55D23 Compressed Size       00000A3C (2620)\n+55D27 Uncompressed Size     00000A3C (2620)\n+55D2B Filename Length       002F (47)\n+55D2D Extra Length          0009 (9)\n+55D2F Comment Length        0000 (0)\n+55D31 Disk Start            0000 (0)\n+55D33 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55D35 Ext File Attributes   00000000 (0)\n+55D39 Local Header Offset   00035F00 (220928)\n+55D3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55D3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55D6C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55D6E   Length              0005 (5)\n+55D70   Flags               01 (1) 'Modification'\n+55D71   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55D75 CENTRAL HEADER #71    02014B50 (33639248)\n+55D79 Created Zip Spec      14 (20) '2.0'\n+55D7A Created OS            00 (0) 'MS-DOS'\n+55D7B Extract Zip Spec      14 (20) '2.0'\n+55D7C Extract OS            00 (0) 'MS-DOS'\n+55D7D General Purpose Flag  0000 (0)\n+55D7F Compression Method    0000 (0) 'Stored'\n+55D81 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55D85 CRC                   00000000 (0)\n+55D89 Compressed Size       00000000 (0)\n+55D8D Uncompressed Size     00000000 (0)\n+55D91 Filename Length       0020 (32)\n+55D93 Extra Length          0009 (9)\n+55D95 Comment Length        0000 (0)\n+55D97 Disk Start            0000 (0)\n+55D99 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55D9B Ext File Attributes   00000000 (0)\n+55D9F Local Header Offset   000369A2 (223650)\n+55DA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55DA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55DC3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55DC5   Length              0005 (5)\n+55DC7   Flags               01 (1) 'Modification'\n+55DC8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55DCC CENTRAL HEADER #72    02014B50 (33639248)\n+55DD0 Created Zip Spec      14 (20) '2.0'\n+55DD1 Created OS            00 (0) 'MS-DOS'\n+55DD2 Extract Zip Spec      14 (20) '2.0'\n+55DD3 Extract OS            00 (0) 'MS-DOS'\n+55DD4 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55DD6 Compression Method    0000 (0) 'Stored'\n+55DD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55DDC CRC                   184AAEF9 (407547641)\n+55DE0 Compressed Size       00000ADF (2783)\n+55DE4 Uncompressed Size     00000ADF (2783)\n+55DE8 Filename Length       0036 (54)\n+55DEA Extra Length          0009 (9)\n+55DEC Comment Length        0000 (0)\n+55DEE Disk Start            0000 (0)\n+55DF0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55DF2 Ext File Attributes   00000000 (0)\n+55DF6 Local Header Offset   000369E9 (223721)\n+55DFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55DFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55E30 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55E32   Length              0005 (5)\n+55E34   Flags               01 (1) 'Modification'\n+55E35   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55E39 CENTRAL HEADER #73    02014B50 (33639248)\n+55E3D Created Zip Spec      14 (20) '2.0'\n+55E3E Created OS            00 (0) 'MS-DOS'\n+55E3F Extract Zip Spec      14 (20) '2.0'\n+55E40 Extract OS            00 (0) 'MS-DOS'\n+55E41 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55E43 Compression Method    0000 (0) 'Stored'\n+55E45 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55E49 CRC                   3867D7AC (946329516)\n+55E4D Compressed Size       00000A70 (2672)\n+55E51 Uncompressed Size     00000A70 (2672)\n+55E55 Filename Length       002D (45)\n+55E57 Extra Length          0009 (9)\n+55E59 Comment Length        0000 (0)\n+55E5B Disk Start            0000 (0)\n+55E5D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55E5F Ext File Attributes   00000000 (0)\n+55E63 Local Header Offset   00037535 (226613)\n+55E67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55E67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55E94 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55E96   Length              0005 (5)\n+55E98   Flags               01 (1) 'Modification'\n+55E99   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55E9D CENTRAL HEADER #74    02014B50 (33639248)\n+55EA1 Created Zip Spec      14 (20) '2.0'\n+55EA2 Created OS            00 (0) 'MS-DOS'\n+55EA3 Extract Zip Spec      14 (20) '2.0'\n+55EA4 Extract OS            00 (0) 'MS-DOS'\n+55EA5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55EA7 Compression Method    0000 (0) 'Stored'\n+55EA9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55EAD CRC                   00E586BE (15042238)\n+55EB1 Compressed Size       00000678 (1656)\n+55EB5 Uncompressed Size     00000678 (1656)\n+55EB9 Filename Length       002F (47)\n+55EBB Extra Length          0009 (9)\n+55EBD Comment Length        0000 (0)\n+55EBF Disk Start            0000 (0)\n+55EC1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55EC3 Ext File Attributes   00000000 (0)\n+55EC7 Local Header Offset   00038009 (229385)\n+55ECB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55ECB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55EFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55EFC   Length              0005 (5)\n+55EFE   Flags               01 (1) 'Modification'\n+55EFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55F03 CENTRAL HEADER #75    02014B50 (33639248)\n+55F07 Created Zip Spec      14 (20) '2.0'\n+55F08 Created OS            00 (0) 'MS-DOS'\n+55F09 Extract Zip Spec      14 (20) '2.0'\n+55F0A Extract OS            00 (0) 'MS-DOS'\n+55F0B General Purpose Flag  0000 (0)\n+55F0D Compression Method    0000 (0) 'Stored'\n+55F0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55F13 CRC                   00000000 (0)\n+55F17 Compressed Size       00000000 (0)\n+55F1B Uncompressed Size     00000000 (0)\n+55F1F Filename Length       001E (30)\n+55F21 Extra Length          0009 (9)\n+55F23 Comment Length        0000 (0)\n+55F25 Disk Start            0000 (0)\n+55F27 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55F29 Ext File Attributes   00000000 (0)\n+55F2D Local Header Offset   000386E7 (231143)\n+55F31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55F31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55F4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55F51   Length              0005 (5)\n+55F53   Flags               01 (1) 'Modification'\n+55F54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55F58 CENTRAL HEADER #76    02014B50 (33639248)\n+55F5C Created Zip Spec      14 (20) '2.0'\n+55F5D Created OS            00 (0) 'MS-DOS'\n+55F5E Extract Zip Spec      14 (20) '2.0'\n+55F5F Extract OS            00 (0) 'MS-DOS'\n+55F60 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55F62 Compression Method    0000 (0) 'Stored'\n+55F64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55F68 CRC                   E1C5881F (3787819039)\n+55F6C Compressed Size       000006AD (1709)\n+55F70 Uncompressed Size     000006AD (1709)\n+55F74 Filename Length       003C (60)\n+55F76 Extra Length          0009 (9)\n+55F78 Comment Length        0000 (0)\n+55F7A Disk Start            0000 (0)\n+55F7C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55F7E Ext File Attributes   00000000 (0)\n+55F82 Local Header Offset   0003872C (231212)\n+55F86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55F86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+55FC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+55FC4   Length              0005 (5)\n+55FC6   Flags               01 (1) 'Modification'\n+55FC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+55FCB CENTRAL HEADER #77    02014B50 (33639248)\n+55FCF Created Zip Spec      14 (20) '2.0'\n+55FD0 Created OS            00 (0) 'MS-DOS'\n+55FD1 Extract Zip Spec      14 (20) '2.0'\n+55FD2 Extract OS            00 (0) 'MS-DOS'\n+55FD3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+55FD5 Compression Method    0000 (0) 'Stored'\n+55FD7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+55FDB CRC                   FE9FE6BA (4271892154)\n+55FDF Compressed Size       00000515 (1301)\n+55FE3 Uncompressed Size     00000515 (1301)\n+55FE7 Filename Length       003A (58)\n+55FE9 Extra Length          0009 (9)\n+55FEB Comment Length        0000 (0)\n+55FED Disk Start            0000 (0)\n+55FEF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+55FF1 Ext File Attributes   00000000 (0)\n+55FF5 Local Header Offset   00038E4C (233036)\n+55FF9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x55FF9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56033 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56035   Length              0005 (5)\n+56037   Flags               01 (1) 'Modification'\n+56038   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5603C CENTRAL HEADER #78    02014B50 (33639248)\n+56040 Created Zip Spec      14 (20) '2.0'\n+56041 Created OS            00 (0) 'MS-DOS'\n+56042 Extract Zip Spec      14 (20) '2.0'\n+56043 Extract OS            00 (0) 'MS-DOS'\n+56044 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56046 Compression Method    0000 (0) 'Stored'\n+56048 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5604C CRC                   07F77085 (133656709)\n+56050 Compressed Size       000004F7 (1271)\n+56054 Uncompressed Size     000004F7 (1271)\n+56058 Filename Length       0039 (57)\n+5605A Extra Length          0009 (9)\n+5605C Comment Length        0000 (0)\n+5605E Disk Start            0000 (0)\n+56060 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56062 Ext File Attributes   00000000 (0)\n+56066 Local Header Offset   000393D2 (234450)\n+5606A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5606A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+560A3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+560A5   Length              0005 (5)\n+560A7   Flags               01 (1) 'Modification'\n+560A8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+560AC CENTRAL HEADER #79    02014B50 (33639248)\n+560B0 Created Zip Spec      14 (20) '2.0'\n+560B1 Created OS            00 (0) 'MS-DOS'\n+560B2 Extract Zip Spec      14 (20) '2.0'\n+560B3 Extract OS            00 (0) 'MS-DOS'\n+560B4 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+560B6 Compression Method    0000 (0) 'Stored'\n+560B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+560BC CRC                   334FA791 (860858257)\n+560C0 Compressed Size       00000C9A (3226)\n+560C4 Uncompressed Size     00000C9A (3226)\n+560C8 Filename Length       003A (58)\n+560CA Extra Length          0009 (9)\n+560CC Comment Length        0000 (0)\n+560CE Disk Start            0000 (0)\n+560D0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+560D2 Ext File Attributes   00000000 (0)\n+560D6 Local Header Offset   00039939 (235833)\n+560DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x560DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56114 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56116   Length              0005 (5)\n+56118   Flags               01 (1) 'Modification'\n+56119   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5611D CENTRAL HEADER #80    02014B50 (33639248)\n+56121 Created Zip Spec      14 (20) '2.0'\n+56122 Created OS            00 (0) 'MS-DOS'\n+56123 Extract Zip Spec      14 (20) '2.0'\n+56124 Extract OS            00 (0) 'MS-DOS'\n+56125 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56127 Compression Method    0000 (0) 'Stored'\n+56129 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5612D CRC                   5C26FEE4 (1546059492)\n+56131 Compressed Size       00000D57 (3415)\n+56135 Uncompressed Size     00000D57 (3415)\n+56139 Filename Length       0039 (57)\n+5613B Extra Length          0009 (9)\n+5613D Comment Length        0000 (0)\n+5613F Disk Start            0000 (0)\n+56141 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56143 Ext File Attributes   00000000 (0)\n+56147 Local Header Offset   0003A644 (239172)\n+5614B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5614B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56184 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56186   Length              0005 (5)\n+56188   Flags               01 (1) 'Modification'\n+56189   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5618D CENTRAL HEADER #81    02014B50 (33639248)\n+56191 Created Zip Spec      14 (20) '2.0'\n+56192 Created OS            00 (0) 'MS-DOS'\n+56193 Extract Zip Spec      14 (20) '2.0'\n+56194 Extract OS            00 (0) 'MS-DOS'\n+56195 General Purpose Flag  0000 (0)\n+56197 Compression Method    0000 (0) 'Stored'\n+56199 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5619D CRC                   00000000 (0)\n+561A1 Compressed Size       00000000 (0)\n+561A5 Uncompressed Size     00000000 (0)\n+561A9 Filename Length       001E (30)\n+561AB Extra Length          0009 (9)\n+561AD Comment Length        0000 (0)\n+561AF Disk Start            0000 (0)\n+561B1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+561B3 Ext File Attributes   00000000 (0)\n+561B7 Local Header Offset   0003B40B (242699)\n+561BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x561BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+561D9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+561DB   Length              0005 (5)\n+561DD   Flags               01 (1) 'Modification'\n+561DE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+561E2 CENTRAL HEADER #82    02014B50 (33639248)\n+561E6 Created Zip Spec      14 (20) '2.0'\n+561E7 Created OS            00 (0) 'MS-DOS'\n+561E8 Extract Zip Spec      14 (20) '2.0'\n+561E9 Extract OS            00 (0) 'MS-DOS'\n+561EA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+561EC Compression Method    0000 (0) 'Stored'\n+561EE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+561F2 CRC                   EC8B751D (3968562461)\n+561F6 Compressed Size       000008F6 (2294)\n+561FA Uncompressed Size     000008F6 (2294)\n+561FE Filename Length       0033 (51)\n+56200 Extra Length          0009 (9)\n+56202 Comment Length        0000 (0)\n+56204 Disk Start            0000 (0)\n+56206 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56208 Ext File Attributes   00000000 (0)\n+5620C Local Header Offset   0003B450 (242768)\n+56210 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56210: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56243 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56245   Length              0005 (5)\n+56247   Flags               01 (1) 'Modification'\n+56248   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5624C CENTRAL HEADER #83    02014B50 (33639248)\n+56250 Created Zip Spec      14 (20) '2.0'\n+56251 Created OS            00 (0) 'MS-DOS'\n+56252 Extract Zip Spec      14 (20) '2.0'\n+56253 Extract OS            00 (0) 'MS-DOS'\n+56254 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56256 Compression Method    0000 (0) 'Stored'\n+56258 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5625C CRC                   62F535FA (1660237306)\n+56260 Compressed Size       00002022 (8226)\n+56264 Uncompressed Size     00002022 (8226)\n+56268 Filename Length       0032 (50)\n+5626A Extra Length          0009 (9)\n+5626C Comment Length        0000 (0)\n+5626E Disk Start            0000 (0)\n+56270 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56272 Ext File Attributes   00000000 (0)\n+56276 Local Header Offset   0003BDB0 (245168)\n+5627A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5627A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+562AC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+562AE   Length              0005 (5)\n+562B0   Flags               01 (1) 'Modification'\n+562B1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+562B5 CENTRAL HEADER #84    02014B50 (33639248)\n+562B9 Created Zip Spec      14 (20) '2.0'\n+562BA Created OS            00 (0) 'MS-DOS'\n+562BB Extract Zip Spec      14 (20) '2.0'\n+562BC Extract OS            00 (0) 'MS-DOS'\n+562BD General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+562BF Compression Method    0000 (0) 'Stored'\n+562C1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+562C5 CRC                   56578DF7 (1448578551)\n+562C9 Compressed Size       00001172 (4466)\n+562CD Uncompressed Size     00001172 (4466)\n+562D1 Filename Length       0033 (51)\n+562D3 Extra Length          0009 (9)\n+562D5 Comment Length        0000 (0)\n+562D7 Disk Start            0000 (0)\n+562D9 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+562DB Ext File Attributes   00000000 (0)\n+562DF Local Header Offset   0003DE3B (253499)\n+562E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x562E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56316 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56318   Length              0005 (5)\n+5631A   Flags               01 (1) 'Modification'\n+5631B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5631F CENTRAL HEADER #85    02014B50 (33639248)\n+56323 Created Zip Spec      14 (20) '2.0'\n+56324 Created OS            00 (0) 'MS-DOS'\n+56325 Extract Zip Spec      14 (20) '2.0'\n+56326 Extract OS            00 (0) 'MS-DOS'\n+56327 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56329 Compression Method    0000 (0) 'Stored'\n+5632B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5632F CRC                   1140D3D7 (289461207)\n+56333 Compressed Size       000021E4 (8676)\n+56337 Uncompressed Size     000021E4 (8676)\n+5633B Filename Length       0038 (56)\n+5633D Extra Length          0009 (9)\n+5633F Comment Length        0000 (0)\n+56341 Disk Start            0000 (0)\n+56343 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56345 Ext File Attributes   00000000 (0)\n+56349 Local Header Offset   0003F017 (258071)\n+5634D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5634D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56385 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56387   Length              0005 (5)\n+56389   Flags               01 (1) 'Modification'\n+5638A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5638E CENTRAL HEADER #86    02014B50 (33639248)\n+56392 Created Zip Spec      14 (20) '2.0'\n+56393 Created OS            00 (0) 'MS-DOS'\n+56394 Extract Zip Spec      14 (20) '2.0'\n+56395 Extract OS            00 (0) 'MS-DOS'\n+56396 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56398 Compression Method    0000 (0) 'Stored'\n+5639A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5639E CRC                   B6A13567 (3064018279)\n+563A2 Compressed Size       00000FBC (4028)\n+563A6 Uncompressed Size     00000FBC (4028)\n+563AA Filename Length       0035 (53)\n+563AC Extra Length          0009 (9)\n+563AE Comment Length        0000 (0)\n+563B0 Disk Start            0000 (0)\n+563B2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+563B4 Ext File Attributes   00000000 (0)\n+563B8 Local Header Offset   0004126A (266858)\n+563BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x563BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+563F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+563F3   Length              0005 (5)\n+563F5   Flags               01 (1) 'Modification'\n+563F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+563FA CENTRAL HEADER #87    02014B50 (33639248)\n+563FE Created Zip Spec      14 (20) '2.0'\n+563FF Created OS            00 (0) 'MS-DOS'\n+56400 Extract Zip Spec      14 (20) '2.0'\n+56401 Extract OS            00 (0) 'MS-DOS'\n+56402 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56404 Compression Method    0000 (0) 'Stored'\n+56406 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5640A CRC                   0A163D1E (169229598)\n+5640E Compressed Size       0000101E (4126)\n+56412 Uncompressed Size     0000101E (4126)\n+56416 Filename Length       002D (45)\n+56418 Extra Length          0009 (9)\n+5641A Comment Length        0000 (0)\n+5641C Disk Start            0000 (0)\n+5641E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56420 Ext File Attributes   00000000 (0)\n+56424 Local Header Offset   00042292 (270994)\n+56428 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56428: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56455 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56457   Length              0005 (5)\n+56459   Flags               01 (1) 'Modification'\n+5645A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5645E CENTRAL HEADER #88    02014B50 (33639248)\n+56462 Created Zip Spec      14 (20) '2.0'\n+56463 Created OS            00 (0) 'MS-DOS'\n+56464 Extract Zip Spec      14 (20) '2.0'\n+56465 Extract OS            00 (0) 'MS-DOS'\n+56466 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56468 Compression Method    0000 (0) 'Stored'\n+5646A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5646E CRC                   873A5673 (2268747379)\n+56472 Compressed Size       0000072D (1837)\n+56476 Uncompressed Size     0000072D (1837)\n+5647A Filename Length       0031 (49)\n+5647C Extra Length          0009 (9)\n+5647E Comment Length        0000 (0)\n+56480 Disk Start            0000 (0)\n+56482 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56484 Ext File Attributes   00000000 (0)\n+56488 Local Header Offset   00043314 (275220)\n+5648C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5648C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+564BD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+564BF   Length              0005 (5)\n+564C1   Flags               01 (1) 'Modification'\n+564C2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+564C6 CENTRAL HEADER #89    02014B50 (33639248)\n+564CA Created Zip Spec      14 (20) '2.0'\n+564CB Created OS            00 (0) 'MS-DOS'\n+564CC Extract Zip Spec      14 (20) '2.0'\n+564CD Extract OS            00 (0) 'MS-DOS'\n+564CE General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+564D0 Compression Method    0000 (0) 'Stored'\n+564D2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+564D6 CRC                   B63E72D7 (3057545943)\n+564DA Compressed Size       00000D50 (3408)\n+564DE Uncompressed Size     00000D50 (3408)\n+564E2 Filename Length       0038 (56)\n+564E4 Extra Length          0009 (9)\n+564E6 Comment Length        0000 (0)\n+564E8 Disk Start            0000 (0)\n+564EA Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+564EC Ext File Attributes   00000000 (0)\n+564F0 Local Header Offset   00043AA9 (277161)\n+564F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x564F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5652C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5652E   Length              0005 (5)\n+56530   Flags               01 (1) 'Modification'\n+56531   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56535 CENTRAL HEADER #90    02014B50 (33639248)\n+56539 Created Zip Spec      14 (20) '2.0'\n+5653A Created OS            00 (0) 'MS-DOS'\n+5653B Extract Zip Spec      14 (20) '2.0'\n+5653C Extract OS            00 (0) 'MS-DOS'\n+5653D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+5653F Compression Method    0000 (0) 'Stored'\n+56541 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56545 CRC                   C40EC84E (3289303118)\n+56549 Compressed Size       00000D18 (3352)\n+5654D Uncompressed Size     00000D18 (3352)\n+56551 Filename Length       003A (58)\n+56553 Extra Length          0009 (9)\n+56555 Comment Length        0000 (0)\n+56557 Disk Start            0000 (0)\n+56559 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+5655B Ext File Attributes   00000000 (0)\n+5655F Local Header Offset   00044868 (280680)\n+56563 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56563: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5659D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5659F   Length              0005 (5)\n+565A1   Flags               01 (1) 'Modification'\n+565A2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+565A6 CENTRAL HEADER #91    02014B50 (33639248)\n+565AA Created Zip Spec      14 (20) '2.0'\n+565AB Created OS            00 (0) 'MS-DOS'\n+565AC Extract Zip Spec      14 (20) '2.0'\n+565AD Extract OS            00 (0) 'MS-DOS'\n+565AE General Purpose Flag  0000 (0)\n+565B0 Compression Method    0000 (0) 'Stored'\n+565B2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+565B6 CRC                   00000000 (0)\n+565BA Compressed Size       00000000 (0)\n+565BE Uncompressed Size     00000000 (0)\n+565C2 Filename Length       0024 (36)\n+565C4 Extra Length          0009 (9)\n+565C6 Comment Length        0000 (0)\n+565C8 Disk Start            0000 (0)\n+565CA Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+565CC Ext File Attributes   00000000 (0)\n+565D0 Local Header Offset   000455F1 (284145)\n+565D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x565D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+565F8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+565FA   Length              0005 (5)\n+565FC   Flags               01 (1) 'Modification'\n+565FD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56601 CENTRAL HEADER #92    02014B50 (33639248)\n+56605 Created Zip Spec      14 (20) '2.0'\n+56606 Created OS            00 (0) 'MS-DOS'\n+56607 Extract Zip Spec      14 (20) '2.0'\n+56608 Extract OS            00 (0) 'MS-DOS'\n+56609 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+5660B Compression Method    0000 (0) 'Stored'\n+5660D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56611 CRC                   3F21380C (1059141644)\n+56615 Compressed Size       00000E11 (3601)\n+56619 Uncompressed Size     00000E11 (3601)\n+5661D Filename Length       0036 (54)\n+5661F Extra Length          0009 (9)\n+56621 Comment Length        0000 (0)\n+56623 Disk Start            0000 (0)\n+56625 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56627 Ext File Attributes   00000000 (0)\n+5662B Local Header Offset   0004563C (284220)\n+5662F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5662F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56665 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56667   Length              0005 (5)\n+56669   Flags               01 (1) 'Modification'\n+5666A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5666E CENTRAL HEADER #93    02014B50 (33639248)\n+56672 Created Zip Spec      14 (20) '2.0'\n+56673 Created OS            00 (0) 'MS-DOS'\n+56674 Extract Zip Spec      14 (20) '2.0'\n+56675 Extract OS            00 (0) 'MS-DOS'\n+56676 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56678 Compression Method    0000 (0) 'Stored'\n+5667A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5667E CRC                   49F89DC8 (1241030088)\n+56682 Compressed Size       0000041E (1054)\n+56686 Uncompressed Size     0000041E (1054)\n+5668A Filename Length       0035 (53)\n+5668C Extra Length          0009 (9)\n+5668E Comment Length        0000 (0)\n+56690 Disk Start            0000 (0)\n+56692 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56694 Ext File Attributes   00000000 (0)\n+56698 Local Header Offset   000464BA (287930)\n+5669C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5669C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+566D1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+566D3   Length              0005 (5)\n+566D5   Flags               01 (1) 'Modification'\n+566D6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+566DA CENTRAL HEADER #94    02014B50 (33639248)\n+566DE Created Zip Spec      14 (20) '2.0'\n+566DF Created OS            00 (0) 'MS-DOS'\n+566E0 Extract Zip Spec      14 (20) '2.0'\n+566E1 Extract OS            00 (0) 'MS-DOS'\n+566E2 General Purpose Flag  0000 (0)\n+566E4 Compression Method    0000 (0) 'Stored'\n+566E6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+566EA CRC                   00000000 (0)\n+566EE Compressed Size       00000000 (0)\n+566F2 Uncompressed Size     00000000 (0)\n+566F6 Filename Length       001B (27)\n+566F8 Extra Length          0009 (9)\n+566FA Comment Length        0000 (0)\n+566FC Disk Start            0000 (0)\n+566FE Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56700 Ext File Attributes   00000000 (0)\n+56704 Local Header Offset   00046944 (289092)\n+56708 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56708: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56723 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56725   Length              0005 (5)\n+56727   Flags               01 (1) 'Modification'\n+56728   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+5672C CENTRAL HEADER #95    02014B50 (33639248)\n+56730 Created Zip Spec      14 (20) '2.0'\n+56731 Created OS            00 (0) 'MS-DOS'\n+56732 Extract Zip Spec      14 (20) '2.0'\n+56733 Extract OS            00 (0) 'MS-DOS'\n+56734 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56736 Compression Method    0000 (0) 'Stored'\n+56738 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+5673C CRC                   E40DEA4B (3826117195)\n+56740 Compressed Size       00000CAE (3246)\n+56744 Uncompressed Size     00000CAE (3246)\n+56748 Filename Length       0034 (52)\n+5674A Extra Length          0009 (9)\n+5674C Comment Length        0000 (0)\n+5674E Disk Start            0000 (0)\n+56750 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56752 Ext File Attributes   00000000 (0)\n+56756 Local Header Offset   00046986 (289158)\n+5675A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5675A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5678E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56790   Length              0005 (5)\n+56792   Flags               01 (1) 'Modification'\n+56793   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56797 CENTRAL HEADER #96    02014B50 (33639248)\n+5679B Created Zip Spec      14 (20) '2.0'\n+5679C Created OS            00 (0) 'MS-DOS'\n+5679D Extract Zip Spec      14 (20) '2.0'\n+5679E Extract OS            00 (0) 'MS-DOS'\n+5679F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+567A1 Compression Method    0000 (0) 'Stored'\n+567A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+567A7 CRC                   09E32673 (165881459)\n+567AB Compressed Size       0000136F (4975)\n+567AF Uncompressed Size     0000136F (4975)\n+567B3 Filename Length       0034 (52)\n+567B5 Extra Length          0009 (9)\n+567B7 Comment Length        0000 (0)\n+567B9 Disk Start            0000 (0)\n+567BB Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+567BD Ext File Attributes   00000000 (0)\n+567C1 Local Header Offset   0004769F (292511)\n+567C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x567C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+567F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+567FB   Length              0005 (5)\n+567FD   Flags               01 (1) 'Modification'\n+567FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56802 CENTRAL HEADER #97    02014B50 (33639248)\n+56806 Created Zip Spec      14 (20) '2.0'\n+56807 Created OS            00 (0) 'MS-DOS'\n+56808 Extract Zip Spec      14 (20) '2.0'\n+56809 Extract OS            00 (0) 'MS-DOS'\n+5680A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+5680C Compression Method    0000 (0) 'Stored'\n+5680E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56812 CRC                   BE828C08 (3196226568)\n+56816 Compressed Size       00000F73 (3955)\n+5681A Uncompressed Size     00000F73 (3955)\n+5681E Filename Length       0038 (56)\n+56820 Extra Length          0009 (9)\n+56822 Comment Length        0000 (0)\n+56824 Disk Start            0000 (0)\n+56826 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56828 Ext File Attributes   00000000 (0)\n+5682C Local Header Offset   00048A79 (297593)\n+56830 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56830: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56868 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5686A   Length              0005 (5)\n+5686C   Flags               01 (1) 'Modification'\n+5686D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56871 CENTRAL HEADER #98    02014B50 (33639248)\n+56875 Created Zip Spec      14 (20) '2.0'\n+56876 Created OS            00 (0) 'MS-DOS'\n+56877 Extract Zip Spec      14 (20) '2.0'\n+56878 Extract OS            00 (0) 'MS-DOS'\n+56879 General Purpose Flag  0000 (0)\n+5687B Compression Method    0000 (0) 'Stored'\n+5687D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56881 CRC                   00000000 (0)\n+56885 Compressed Size       00000000 (0)\n+56889 Uncompressed Size     00000000 (0)\n+5688D Filename Length       0025 (37)\n+5688F Extra Length          0009 (9)\n+56891 Comment Length        0000 (0)\n+56893 Disk Start            0000 (0)\n+56895 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56897 Ext File Attributes   00000000 (0)\n+5689B Local Header Offset   00049A5B (301659)\n+5689F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5689F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+568C4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+568C6   Length              0005 (5)\n+568C8   Flags               01 (1) 'Modification'\n+568C9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+568CD CENTRAL HEADER #99    02014B50 (33639248)\n+568D1 Created Zip Spec      14 (20) '2.0'\n+568D2 Created OS            00 (0) 'MS-DOS'\n+568D3 Extract Zip Spec      14 (20) '2.0'\n+568D4 Extract OS            00 (0) 'MS-DOS'\n+568D5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+568D7 Compression Method    0000 (0) 'Stored'\n+568D9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+568DD CRC                   33B08A9A (867207834)\n+568E1 Compressed Size       000008F0 (2288)\n+568E5 Uncompressed Size     000008F0 (2288)\n+568E9 Filename Length       003F (63)\n+568EB Extra Length          0009 (9)\n+568ED Comment Length        0000 (0)\n+568EF Disk Start            0000 (0)\n+568F1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+568F3 Ext File Attributes   00000000 (0)\n+568F7 Local Header Offset   00049AA7 (301735)\n+568FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x568FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+5693A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+5693C   Length              0005 (5)\n+5693E   Flags               01 (1) 'Modification'\n+5693F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56943 CENTRAL HEADER #100   02014B50 (33639248)\n+56947 Created Zip Spec      14 (20) '2.0'\n+56948 Created OS            00 (0) 'MS-DOS'\n+56949 Extract Zip Spec      14 (20) '2.0'\n+5694A Extract OS            00 (0) 'MS-DOS'\n+5694B General Purpose Flag  0000 (0)\n+5694D Compression Method    0000 (0) 'Stored'\n+5694F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56953 CRC                   00000000 (0)\n+56957 Compressed Size       00000000 (0)\n+5695B Uncompressed Size     00000000 (0)\n+5695F Filename Length       001F (31)\n+56961 Extra Length          0009 (9)\n+56963 Comment Length        0000 (0)\n+56965 Disk Start            0000 (0)\n+56967 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56969 Ext File Attributes   00000000 (0)\n+5696D Local Header Offset   0004A40D (304141)\n+56971 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56971: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56990 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56992   Length              0005 (5)\n+56994   Flags               01 (1) 'Modification'\n+56995   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56999 CENTRAL HEADER #101   02014B50 (33639248)\n+5699D Created Zip Spec      14 (20) '2.0'\n+5699E Created OS            00 (0) 'MS-DOS'\n+5699F Extract Zip Spec      14 (20) '2.0'\n+569A0 Extract OS            00 (0) 'MS-DOS'\n+569A1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+569A3 Compression Method    0000 (0) 'Stored'\n+569A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+569A9 CRC                   776F6B16 (2003790614)\n+569AD Compressed Size       0000084C (2124)\n+569B1 Uncompressed Size     0000084C (2124)\n+569B5 Filename Length       0033 (51)\n+569B7 Extra Length          0009 (9)\n+569B9 Comment Length        0000 (0)\n+569BB Disk Start            0000 (0)\n+569BD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+569BF Ext File Attributes   00000000 (0)\n+569C3 Local Header Offset   0004A453 (304211)\n+569C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x569C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+569FA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+569FC   Length              0005 (5)\n+569FE   Flags               01 (1) 'Modification'\n+569FF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56A03 CENTRAL HEADER #102   02014B50 (33639248)\n+56A07 Created Zip Spec      14 (20) '2.0'\n+56A08 Created OS            00 (0) 'MS-DOS'\n+56A09 Extract Zip Spec      14 (20) '2.0'\n+56A0A Extract OS            00 (0) 'MS-DOS'\n+56A0B General Purpose Flag  0000 (0)\n+56A0D Compression Method    0000 (0) 'Stored'\n+56A0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56A13 CRC                   00000000 (0)\n+56A17 Compressed Size       00000000 (0)\n+56A1B Uncompressed Size     00000000 (0)\n+56A1F Filename Length       0023 (35)\n+56A21 Extra Length          0009 (9)\n+56A23 Comment Length        0000 (0)\n+56A25 Disk Start            0000 (0)\n+56A27 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56A29 Ext File Attributes   00000000 (0)\n+56A2D Local Header Offset   0004AD09 (306441)\n+56A31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56A31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56A54 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56A56   Length              0005 (5)\n+56A58   Flags               01 (1) 'Modification'\n+56A59   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56A5D CENTRAL HEADER #103   02014B50 (33639248)\n+56A61 Created Zip Spec      14 (20) '2.0'\n+56A62 Created OS            00 (0) 'MS-DOS'\n+56A63 Extract Zip Spec      14 (20) '2.0'\n+56A64 Extract OS            00 (0) 'MS-DOS'\n+56A65 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56A67 Compression Method    0000 (0) 'Stored'\n+56A69 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56A6D CRC                   A1EB5EED (2716557037)\n+56A71 Compressed Size       000016D2 (5842)\n+56A75 Uncompressed Size     000016D2 (5842)\n+56A79 Filename Length       003F (63)\n+56A7B Extra Length          0009 (9)\n+56A7D Comment Length        0000 (0)\n+56A7F Disk Start            0000 (0)\n+56A81 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56A83 Ext File Attributes   00000000 (0)\n+56A87 Local Header Offset   0004AD53 (306515)\n+56A8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56A8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56ACA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56ACC   Length              0005 (5)\n+56ACE   Flags               01 (1) 'Modification'\n+56ACF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56AD3 CENTRAL HEADER #104   02014B50 (33639248)\n+56AD7 Created Zip Spec      14 (20) '2.0'\n+56AD8 Created OS            00 (0) 'MS-DOS'\n+56AD9 Extract Zip Spec      14 (20) '2.0'\n+56ADA Extract OS            00 (0) 'MS-DOS'\n+56ADB General Purpose Flag  0000 (0)\n+56ADD Compression Method    0000 (0) 'Stored'\n+56ADF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56AE3 CRC                   00000000 (0)\n+56AE7 Compressed Size       00000000 (0)\n+56AEB Uncompressed Size     00000000 (0)\n+56AEF Filename Length       001D (29)\n+56AF1 Extra Length          0009 (9)\n+56AF3 Comment Length        0000 (0)\n+56AF5 Disk Start            0000 (0)\n+56AF7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56AF9 Ext File Attributes   00000000 (0)\n+56AFD Local Header Offset   0004C49B (312475)\n+56B01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56B01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56B1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56B20   Length              0005 (5)\n+56B22   Flags               01 (1) 'Modification'\n+56B23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56B27 CENTRAL HEADER #105   02014B50 (33639248)\n+56B2B Created Zip Spec      14 (20) '2.0'\n+56B2C Created OS            00 (0) 'MS-DOS'\n+56B2D Extract Zip Spec      14 (20) '2.0'\n+56B2E Extract OS            00 (0) 'MS-DOS'\n+56B2F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56B31 Compression Method    0000 (0) 'Stored'\n+56B33 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56B37 CRC                   93BDDA62 (2478692962)\n+56B3B Compressed Size       00002000 (8192)\n+56B3F Uncompressed Size     00002000 (8192)\n+56B43 Filename Length       002F (47)\n+56B45 Extra Length          0009 (9)\n+56B47 Comment Length        0000 (0)\n+56B49 Disk Start            0000 (0)\n+56B4B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56B4D Ext File Attributes   00000000 (0)\n+56B51 Local Header Offset   0004C4DF (312543)\n+56B55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56B55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56B84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56B86   Length              0005 (5)\n+56B88   Flags               01 (1) 'Modification'\n+56B89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56B8D CENTRAL HEADER #106   02014B50 (33639248)\n+56B91 Created Zip Spec      14 (20) '2.0'\n+56B92 Created OS            00 (0) 'MS-DOS'\n+56B93 Extract Zip Spec      14 (20) '2.0'\n+56B94 Extract OS            00 (0) 'MS-DOS'\n+56B95 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56B97 Compression Method    0000 (0) 'Stored'\n+56B99 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56B9D CRC                   E459791A (3831068954)\n+56BA1 Compressed Size       00002B55 (11093)\n+56BA5 Uncompressed Size     00002B55 (11093)\n+56BA9 Filename Length       002D (45)\n+56BAB Extra Length          0009 (9)\n+56BAD Comment Length        0000 (0)\n+56BAF Disk Start            0000 (0)\n+56BB1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56BB3 Ext File Attributes   00000000 (0)\n+56BB7 Local Header Offset   0004E545 (320837)\n+56BBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56BBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56BE8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56BEA   Length              0005 (5)\n+56BEC   Flags               01 (1) 'Modification'\n+56BED   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56BF1 CENTRAL HEADER #107   02014B50 (33639248)\n+56BF5 Created Zip Spec      14 (20) '2.0'\n+56BF6 Created OS            00 (0) 'MS-DOS'\n+56BF7 Extract Zip Spec      14 (20) '2.0'\n+56BF8 Extract OS            00 (0) 'MS-DOS'\n+56BF9 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56BFB Compression Method    0000 (0) 'Stored'\n+56BFD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56C01 CRC                   80C30D3D (2160266557)\n+56C05 Compressed Size       0000065E (1630)\n+56C09 Uncompressed Size     0000065E (1630)\n+56C0D Filename Length       002E (46)\n+56C0F Extra Length          0009 (9)\n+56C11 Comment Length        0000 (0)\n+56C13 Disk Start            0000 (0)\n+56C15 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56C17 Ext File Attributes   00000000 (0)\n+56C1B Local Header Offset   000510FE (332030)\n+56C1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56C1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56C4D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56C4F   Length              0005 (5)\n+56C51   Flags               01 (1) 'Modification'\n+56C52   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56C56 CENTRAL HEADER #108   02014B50 (33639248)\n+56C5A Created Zip Spec      14 (20) '2.0'\n+56C5B Created OS            00 (0) 'MS-DOS'\n+56C5C Extract Zip Spec      14 (20) '2.0'\n+56C5D Extract OS            00 (0) 'MS-DOS'\n+56C5E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+56C60 Compression Method    0000 (0) 'Stored'\n+56C62 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+56C66 CRC                   8E103737 (2383427383)\n+56C6A Compressed Size       00002C47 (11335)\n+56C6E Uncompressed Size     00002C47 (11335)\n+56C72 Filename Length       002A (42)\n+56C74 Extra Length          0009 (9)\n+56C76 Comment Length        0000 (0)\n+56C78 Disk Start            0000 (0)\n+56C7A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+56C7C Ext File Attributes   00000000 (0)\n+56C80 Local Header Offset   000517C1 (333761)\n+56C84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56C84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+56CAE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+56CB0   Length              0005 (5)\n+56CB2   Flags               01 (1) 'Modification'\n+56CB3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+56CB7 END CENTRAL HEADER    06054B50 (101010256)\n+56CBB Number of this disk   0000 (0)\n+56CBD Central Dir Disk no   0000 (0)\n+56CBF Entries in this disk  006C (108)\n+56CC1 Total Entries         006C (108)\n+56CC3 Size of Central Dir   0000284E (10318)\n+56CC7 Offset to Central Dir 00054469 (345193)\n+56CCB Comment Length        0000 (0)\n #\n # Warning Count: 216\n #\n # Done\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-rpc-api/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-rpc-api/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,155 +1,152 @@\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: 6170 693c 2f61 7274 6966 6163 7449 643e  api</artifactId>\n-00000520: 0d0a 2020 3c76 6572 7369 6f6e 3e32 2e37  ..  <version>2.7\n-00000530: 2e31 303c 2f76 6572 7369 6f6e 3e0d 0a20  .10</version>.. \n-00000540: 203c 6e61 6d65 3e24 7b70 726f 6a65 6374   <name>${project\n-00000550: 2e61 7274 6966 6163 7449 647d 3c2f 6e61  .artifactId}</na\n-00000560: 6d65 3e0d 0a20 203c 6465 7363 7269 7074  me>..  <descript\n-00000570: 696f 6e3e 5468 6520 7270 6320 6d6f 6475  ion>The rpc modu\n-00000580: 6c65 206f 6620 6475 6262 6f20 7072 6f6a  le of dubbo proj\n-00000590: 6563 743c 2f64 6573 6372 6970 7469 6f6e  ect</description\n-000005a0: 3e0d 0a20 203c 6c69 6365 6e73 6573 3e0d  >..  <licenses>.\n-000005b0: 0a20 2020 203c 6c69 6365 6e73 653e 0d0a  .    <license>..\n-000005c0: 2020 2020 2020 3c6e 616d 653e 4170 6163        <name>Apac\n-000005d0: 6865 204c 6963 656e 7365 2c20 5665 7273  he License, Vers\n-000005e0: 696f 6e20 322e 303c 2f6e 616d 653e 0d0a  ion 2.0</name>..\n-000005f0: 2020 2020 2020 3c75 726c 3e68 7474 703a        <url>http:\n-00000600: 2f2f 7777 772e 6170 6163 6865 2e6f 7267  //www.apache.org\n-00000610: 2f6c 6963 656e 7365 732f 4c49 4345 4e53  /licenses/LICENS\n-00000620: 452d 322e 303c 2f75 726c 3e0d 0a20 2020  E-2.0</url>..   \n-00000630: 2020 203c 6469 7374 7269 6275 7469 6f6e     <distribution\n-00000640: 3e72 6570 6f3c 2f64 6973 7472 6962 7574  >repo</distribut\n-00000650: 696f 6e3e 0d0a 2020 2020 3c2f 6c69 6365  ion>..    </lice\n-00000660: 6e73 653e 0d0a 2020 3c2f 6c69 6365 6e73  nse>..  </licens\n-00000670: 6573 3e0d 0a20 203c 7072 6f70 6572 7469  es>..  <properti\n-00000680: 6573 3e0d 0a20 2020 203c 736b 6970 5f6d  es>..    <skip_m\n-00000690: 6176 656e 5f64 6570 6c6f 793e 6661 6c73  aven_deploy>fals\n-000006a0: 653c 2f73 6b69 705f 6d61 7665 6e5f 6465  e</skip_maven_de\n-000006b0: 706c 6f79 3e0d 0a20 203c 2f70 726f 7065  ploy>..  </prope\n-000006c0: 7274 6965 733e 0d0a 2020 3c64 6570 656e  rties>..  <depen\n-000006d0: 6465 6e63 6965 733e 0d0a 2020 2020 3c64  dencies>..    <d\n-000006e0: 6570 656e 6465 6e63 793e 0d0a 2020 2020  ependency>..    \n-000006f0: 2020 3c67 726f 7570 4964 3e6f 7267 2e61    <groupId>org.a\n-00000700: 7061 6368 652e 6475 6262 6f3c 2f67 726f  pache.dubbo</gro\n-00000710: 7570 4964 3e0d 0a20 2020 2020 203c 6172  upId>..      <ar\n-00000720: 7469 6661 6374 4964 3e64 7562 626f 2d63  tifactId>dubbo-c\n-00000730: 6f6d 6d6f 6e3c 2f61 7274 6966 6163 7449  ommon</artifactI\n-00000740: 643e 0d0a 2020 2020 2020 3c76 6572 7369  d>..      <versi\n-00000750: 6f6e 3e24 7b70 726f 6a65 6374 2e70 6172  on>${project.par\n-00000760: 656e 742e 7665 7273 696f 6e7d 3c2f 7665  ent.version}</ve\n-00000770: 7273 696f 6e3e 0d0a 2020 2020 3c2f 6465  rsion>..    </de\n-00000780: 7065 6e64 656e 6379 3e0d 0a20 2020 203c  pendency>..    <\n-00000790: 6465 7065 6e64 656e 6379 3e0d 0a20 2020  dependency>..   \n-000007a0: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n-000007b0: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n-000007c0: 6f75 7049 643e 0d0a 2020 2020 2020 3c61  oupId>..      <a\n-000007d0: 7274 6966 6163 7449 643e 6475 6262 6f2d  rtifactId>dubbo-\n-000007e0: 7365 7269 616c 697a 6174 696f 6e2d 6170  serialization-ap\n-000007f0: 693c 2f61 7274 6966 6163 7449 643e 0d0a  i</artifactId>..\n-00000800: 2020 2020 2020 3c76 6572 7369 6f6e 3e24        <version>$\n-00000810: 7b70 726f 6a65 6374 2e70 6172 656e 742e  {project.parent.\n-00000820: 7665 7273 696f 6e7d 3c2f 7665 7273 696f  version}</versio\n-00000830: 6e3e 0d0a 2020 2020 3c2f 6465 7065 6e64  n>..    </depend\n-00000840: 656e 6379 3e0d 0a20 2020 203c 6465 7065  ency>..    <depe\n-00000850: 6e64 656e 6379 3e0d 0a20 2020 2020 203c  ndency>..      <\n-00000860: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n-00000870: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n-00000880: 643e 0d0a 2020 2020 2020 3c61 7274 6966  d>..      <artif\n-00000890: 6163 7449 643e 6475 6262 6f2d 7265 6d6f  actId>dubbo-remo\n-000008a0: 7469 6e67 2d61 7069 3c2f 6172 7469 6661  ting-api</artifa\n-000008b0: 6374 4964 3e0d 0a20 2020 2020 203c 7665  ctId>..      <ve\n-000008c0: 7273 696f 6e3e 247b 7072 6f6a 6563 742e  rsion>${project.\n-000008d0: 7061 7265 6e74 2e76 6572 7369 6f6e 7d3c  parent.version}<\n-000008e0: 2f76 6572 7369 6f6e 3e0d 0a20 2020 203c  /version>..    <\n-000008f0: 2f64 6570 656e 6465 6e63 793e 0d0a 2020  /dependency>..  \n-00000900: 2020 3c64 6570 656e 6465 6e63 793e 0d0a    <dependency>..\n-00000910: 2020 2020 2020 3c67 726f 7570 4964 3e63        <groupId>c\n-00000920: 6f6d 2e61 6c69 6261 6261 3c2f 6772 6f75  om.alibaba</grou\n-00000930: 7049 643e 0d0a 2020 2020 2020 3c61 7274  pId>..      <art\n-00000940: 6966 6163 7449 643e 6865 7373 6961 6e2d  ifactId>hessian-\n-00000950: 6c69 7465 3c2f 6172 7469 6661 6374 4964  lite</artifactId\n-00000960: 3e0d 0a20 2020 2020 203c 7363 6f70 653e  >..      <scope>\n-00000970: 7465 7374 3c2f 7363 6f70 653e 0d0a 2020  test</scope>..  \n-00000980: 2020 3c2f 6465 7065 6e64 656e 6379 3e0d    </dependency>.\n-00000990: 0a20 203c 2f64 6570 656e 6465 6e63 6965  .  </dependencie\n-000009a0: 733e 0d0a 3c2f 7072 6f6a 6563 743e 0d0a  s>..</project>..\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 6170 693c 2f61 7274 6966  o-rpc-api</artif\n+00000500: 6163 7449 643e 0a20 203c 7665 7273 696f  actId>.  <versio\n+00000510: 6e3e 322e 372e 3130 3c2f 7665 7273 696f  n>2.7.10</versio\n+00000520: 6e3e 0a20 203c 6e61 6d65 3e24 7b70 726f  n>.  <name>${pro\n+00000530: 6a65 6374 2e61 7274 6966 6163 7449 647d  ject.artifactId}\n+00000540: 3c2f 6e61 6d65 3e0a 2020 3c64 6573 6372  </name>.  <descr\n+00000550: 6970 7469 6f6e 3e54 6865 2072 7063 206d  iption>The rpc m\n+00000560: 6f64 756c 6520 6f66 2064 7562 626f 2070  odule of dubbo p\n+00000570: 726f 6a65 6374 3c2f 6465 7363 7269 7074  roject</descript\n+00000580: 696f 6e3e 0a20 203c 6c69 6365 6e73 6573  ion>.  <licenses\n+00000590: 3e0a 2020 2020 3c6c 6963 656e 7365 3e0a  >.    <license>.\n+000005a0: 2020 2020 2020 3c6e 616d 653e 4170 6163        <name>Apac\n+000005b0: 6865 204c 6963 656e 7365 2c20 5665 7273  he License, Vers\n+000005c0: 696f 6e20 322e 303c 2f6e 616d 653e 0a20  ion 2.0</name>. \n+000005d0: 2020 2020 203c 7572 6c3e 6874 7470 3a2f       <url>http:/\n+000005e0: 2f77 7777 2e61 7061 6368 652e 6f72 672f  /www.apache.org/\n+000005f0: 6c69 6365 6e73 6573 2f4c 4943 454e 5345  licenses/LICENSE\n+00000600: 2d32 2e30 3c2f 7572 6c3e 0a20 2020 2020  -2.0</url>.     \n+00000610: 203c 6469 7374 7269 6275 7469 6f6e 3e72   <distribution>r\n+00000620: 6570 6f3c 2f64 6973 7472 6962 7574 696f  epo</distributio\n+00000630: 6e3e 0a20 2020 203c 2f6c 6963 656e 7365  n>.    </license\n+00000640: 3e0a 2020 3c2f 6c69 6365 6e73 6573 3e0a  >.  </licenses>.\n+00000650: 2020 3c70 726f 7065 7274 6965 733e 0a20    <properties>. \n+00000660: 2020 203c 736b 6970 5f6d 6176 656e 5f64     <skip_maven_d\n+00000670: 6570 6c6f 793e 6661 6c73 653c 2f73 6b69  eploy>false</ski\n+00000680: 705f 6d61 7665 6e5f 6465 706c 6f79 3e0a  p_maven_deploy>.\n+00000690: 2020 3c2f 7072 6f70 6572 7469 6573 3e0a    </properties>.\n+000006a0: 2020 3c64 6570 656e 6465 6e63 6965 733e    <dependencies>\n+000006b0: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n+000006c0: 3e0a 2020 2020 2020 3c67 726f 7570 4964  >.      <groupId\n+000006d0: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n+000006e0: 6f3c 2f67 726f 7570 4964 3e0a 2020 2020  o</groupId>.    \n+000006f0: 2020 3c61 7274 6966 6163 7449 643e 6475    <artifactId>du\n+00000700: 6262 6f2d 636f 6d6d 6f6e 3c2f 6172 7469  bbo-common</arti\n+00000710: 6661 6374 4964 3e0a 2020 2020 2020 3c76  factId>.      <v\n+00000720: 6572 7369 6f6e 3e24 7b70 726f 6a65 6374  ersion>${project\n+00000730: 2e70 6172 656e 742e 7665 7273 696f 6e7d  .parent.version}\n+00000740: 3c2f 7665 7273 696f 6e3e 0a20 2020 203c  </version>.    <\n+00000750: 2f64 6570 656e 6465 6e63 793e 0a20 2020  /dependency>.   \n+00000760: 203c 6465 7065 6e64 656e 6379 3e0a 2020   <dependency>.  \n+00000770: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n+00000780: 2e61 7061 6368 652e 6475 6262 6f3c 2f67  .apache.dubbo</g\n+00000790: 726f 7570 4964 3e0a 2020 2020 2020 3c61  roupId>.      <a\n+000007a0: 7274 6966 6163 7449 643e 6475 6262 6f2d  rtifactId>dubbo-\n+000007b0: 7365 7269 616c 697a 6174 696f 6e2d 6170  serialization-ap\n+000007c0: 693c 2f61 7274 6966 6163 7449 643e 0a20  i</artifactId>. \n+000007d0: 2020 2020 203c 7665 7273 696f 6e3e 247b       <version>${\n+000007e0: 7072 6f6a 6563 742e 7061 7265 6e74 2e76  project.parent.v\n+000007f0: 6572 7369 6f6e 7d3c 2f76 6572 7369 6f6e  ersion}</version\n+00000800: 3e0a 2020 2020 3c2f 6465 7065 6e64 656e  >.    </dependen\n+00000810: 6379 3e0a 2020 2020 3c64 6570 656e 6465  cy>.    <depende\n+00000820: 6e63 793e 0a20 2020 2020 203c 6772 6f75  ncy>.      <grou\n+00000830: 7049 643e 6f72 672e 6170 6163 6865 2e64  pId>org.apache.d\n+00000840: 7562 626f 3c2f 6772 6f75 7049 643e 0a20  ubbo</groupId>. \n+00000850: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n+00000860: 3e64 7562 626f 2d72 656d 6f74 696e 672d  >dubbo-remoting-\n+00000870: 6170 693c 2f61 7274 6966 6163 7449 643e  api</artifactId>\n+00000880: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n+00000890: 247b 7072 6f6a 6563 742e 7061 7265 6e74  ${project.parent\n+000008a0: 2e76 6572 7369 6f6e 7d3c 2f76 6572 7369  .version}</versi\n+000008b0: 6f6e 3e0a 2020 2020 3c2f 6465 7065 6e64  on>.    </depend\n+000008c0: 656e 6379 3e0a 2020 2020 3c64 6570 656e  ency>.    <depen\n+000008d0: 6465 6e63 793e 0a20 2020 2020 203c 6772  dency>.      <gr\n+000008e0: 6f75 7049 643e 636f 6d2e 616c 6962 6162  oupId>com.alibab\n+000008f0: 613c 2f67 726f 7570 4964 3e0a 2020 2020  a</groupId>.    \n+00000900: 2020 3c61 7274 6966 6163 7449 643e 6865    <artifactId>he\n+00000910: 7373 6961 6e2d 6c69 7465 3c2f 6172 7469  ssian-lite</arti\n+00000920: 6661 6374 4964 3e0a 2020 2020 2020 3c73  factId>.      <s\n+00000930: 636f 7065 3e74 6573 743c 2f73 636f 7065  cope>test</scope\n+00000940: 3e0a 2020 2020 3c2f 6465 7065 6e64 656e  >.    </dependen\n+00000950: 6379 3e0a 2020 3c2f 6465 7065 6e64 656e  cy>.  </dependen\n+00000960: 6369 6573 3e0a 3c2f 7072 6f6a 6563 743e  cies>.</project>\n+00000970: 0a                                       .\n"}, {"source1": "com/alibaba/dubbo/rpc/service/GenericException.java", "source2": "com/alibaba/dubbo/rpc/service/GenericException.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,62 +1,62 @@\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-\n-package com.alibaba.dubbo.rpc.service;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-@Deprecated\n-public class GenericException extends RuntimeException {\n-\n-    private static final long serialVersionUID = -1182299763306599962L;\n-\n-    private String exceptionClass;\n-\n-    private String exceptionMessage;\n-\n-    public GenericException() {\n-    }\n-\n-    public GenericException(String exceptionClass, String exceptionMessage) {\n-        super(exceptionMessage);\n-        this.exceptionClass = exceptionClass;\n-        this.exceptionMessage = exceptionMessage;\n-    }\n-\n-    public GenericException(Throwable cause) {\n-        super(StringUtils.toString(cause));\n-        this.exceptionClass = cause.getClass().getName();\n-        this.exceptionMessage = cause.getMessage();\n-    }\n-\n-    public String getExceptionClass() {\n-        return exceptionClass;\n-    }\n-\n-    public void setExceptionClass(String exceptionClass) {\n-        this.exceptionClass = exceptionClass;\n-    }\n-\n-    public String getExceptionMessage() {\n-        return exceptionMessage;\n-    }\n-\n-    public void setExceptionMessage(String exceptionMessage) {\n-        this.exceptionMessage = exceptionMessage;\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+\r\n+package com.alibaba.dubbo.rpc.service;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+@Deprecated\r\n+public class GenericException extends RuntimeException {\r\n+\r\n+    private static final long serialVersionUID = -1182299763306599962L;\r\n+\r\n+    private String exceptionClass;\r\n+\r\n+    private String exceptionMessage;\r\n+\r\n+    public GenericException() {\r\n+    }\r\n+\r\n+    public GenericException(String exceptionClass, String exceptionMessage) {\r\n+        super(exceptionMessage);\r\n+        this.exceptionClass = exceptionClass;\r\n+        this.exceptionMessage = exceptionMessage;\r\n+    }\r\n+\r\n+    public GenericException(Throwable cause) {\r\n+        super(StringUtils.toString(cause));\r\n+        this.exceptionClass = cause.getClass().getName();\r\n+        this.exceptionMessage = cause.getMessage();\r\n+    }\r\n+\r\n+    public String getExceptionClass() {\r\n+        return exceptionClass;\r\n+    }\r\n+\r\n+    public void setExceptionClass(String exceptionClass) {\r\n+        this.exceptionClass = exceptionClass;\r\n+    }\r\n+\r\n+    public String getExceptionMessage() {\r\n+        return exceptionMessage;\r\n+    }\r\n+\r\n+    public void setExceptionMessage(String exceptionMessage) {\r\n+        this.exceptionMessage = exceptionMessage;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/AppResponse.java", "source2": "org/apache/dubbo/rpc/AppResponse.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,255 +1,255 @@\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;\n-\n-\n-import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.ExecutionException;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.TimeoutException;\n-import java.util.function.BiConsumer;\n-import java.util.function.Function;\n-\n-import static org.apache.dubbo.rpc.Constants.INVOCATION_KEY;\n-\n-/**\n- * {@link AsyncRpcResult} is introduced in 3.0.0 to replace RpcResult, and RpcResult is replaced with {@link AppResponse}:\n- * <ul>\n- *     <li>AsyncRpcResult is the object that is actually passed in the call chain</li>\n- *     <li>AppResponse only simply represents the business result</li>\n- * </ul>\n- * <p>\n- *  The relationship between them can be described as follow, an abstraction of the definition of AsyncRpcResult:\n- *  <pre>\n- *  {@code\n- *   Public class AsyncRpcResult implements CompletionStage<AppResponse> {\n- *       ......\n- *  }\n- * </pre>\n- * AsyncRpcResult is a future representing an unfinished RPC call, while AppResponse is the actual return type of this call.\n- * In theory, AppResponse doesn't have to implement the {@link Result} interface, this is done mainly for compatibility purpose.\n- *\n- * @serial Do not change the class name and properties.\n- */\n-public class AppResponse implements Result {\n-\n-    private static final long serialVersionUID = -6925924956850004727L;\n-\n-    private Object result;\n-\n-    private Throwable exception;\n-\n-    private Map<String, Object> attachments = new HashMap<>();\n-\n-    private Map<String, Object> attributes = new HashMap<>();\n-\n-    public AppResponse() {\n-    }\n-\n-    public AppResponse(Invocation invocation) {\n-        this.setAttribute(INVOCATION_KEY, invocation);\n-    }\n-\n-    public AppResponse(Object result) {\n-        this.result = result;\n-    }\n-\n-    public AppResponse(Throwable exception) {\n-        this.exception = exception;\n-    }\n-\n-    @Override\n-    public Object recreate() throws Throwable {\n-        if (exception != null) {\n-            // fix issue#619\n-            try {\n-                Object stackTrace = InvokerInvocationHandler.stackTraceField.get(exception);\n-                if (stackTrace == null) {\n-                    exception.setStackTrace(new StackTraceElement[0]);\n-                }\n-            } catch (Exception e) {\n-                // ignore\n-            }\n-            throw exception;\n-        }\n-        return result;\n-    }\n-\n-    @Override\n-    public Object getValue() {\n-        return result;\n-    }\n-\n-    @Override\n-    public void setValue(Object value) {\n-        this.result = value;\n-    }\n-\n-    @Override\n-    public Throwable getException() {\n-        return exception;\n-    }\n-\n-    @Override\n-    public void setException(Throwable e) {\n-        this.exception = e;\n-    }\n-\n-    @Override\n-    public boolean hasException() {\n-        return exception != null;\n-    }\n-\n-    @Override\n-    @Deprecated\n-    public Map<String, String> getAttachments() {\n-        return new AttachmentsAdapter.ObjectToStringMap(attachments);\n-    }\n-\n-    @Override\n-    public Map<String, Object> getObjectAttachments() {\n-        return attachments;\n-    }\n-\n-    /**\n-     * Append all items from the map into the attachment, if map is empty then nothing happens\n-     *\n-     * @param map contains all key-value pairs to append\n-     */\n-    public void setAttachments(Map<String, String> map) {\n-        this.attachments = map == null ? new HashMap<>() : new HashMap<>(map);\n-    }\n-\n-    @Override\n-    public void setObjectAttachments(Map<String, Object> map) {\n-        this.attachments = map == null ? new HashMap<>() : map;\n-    }\n-\n-    public void addAttachments(Map<String, String> map) {\n-        if (map == null) {\n-            return;\n-        }\n-        if (this.attachments == null) {\n-            this.attachments = new HashMap<>();\n-        }\n-        this.attachments.putAll(map);\n-    }\n-\n-    @Override\n-    public void addObjectAttachments(Map<String, Object> map) {\n-        if (map == null) {\n-            return;\n-        }\n-        if (this.attachments == null) {\n-            this.attachments = new HashMap<>();\n-        }\n-        this.attachments.putAll(map);\n-    }\n-\n-    @Override\n-    public String getAttachment(String key) {\n-        Object value = attachments.get(key);\n-        if (value instanceof String) {\n-            return (String) value;\n-        }\n-        return null;\n-    }\n-\n-    @Override\n-    public Object getObjectAttachment(String key) {\n-        return attachments.get(key);\n-    }\n-\n-    @Override\n-    public String getAttachment(String key, String defaultValue) {\n-        Object result = attachments.get(key);\n-        if (result == null) {\n-            return defaultValue;\n-        }\n-        if (result instanceof String) {\n-            return (String) result;\n-        }\n-        return defaultValue;\n-    }\n-\n-    @Override\n-    public Object getObjectAttachment(String key, Object defaultValue) {\n-        Object result = attachments.get(key);\n-        if (result == null) {\n-            result = defaultValue;\n-        }\n-        return result;\n-    }\n-\n-    @Override\n-    public void setAttachment(String key, String value) {\n-        setObjectAttachment(key, value);\n-    }\n-\n-    @Override\n-    public void setAttachment(String key, Object value) {\n-        setObjectAttachment(key, value);\n-    }\n-\n-    @Override\n-    public void setObjectAttachment(String key, Object value) {\n-        attachments.put(key, value);\n-    }\n-\n-    public Object getAttribute(String key) {\n-        return attributes.get(key);\n-    }\n-\n-    public void setAttribute(String key, Object value) {\n-        attributes.put(key, value);\n-    }\n-\n-    @Override\n-    public Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn) {\n-        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\n-    }\n-\n-    @Override\n-    public <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn) {\n-        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\n-    }\n-\n-    @Override\n-    public Result get() throws InterruptedException, ExecutionException {\n-        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\n-    }\n-\n-    @Override\n-    public Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\n-        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\n-    }\n-\n-    public void clear() {\n-        this.result = null;\n-        this.exception = null;\n-        this.attachments.clear();\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"AppResponse [value=\" + result + \", exception=\" + exception + \"]\";\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;\r\n+\r\n+\r\n+import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.ExecutionException;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.TimeoutException;\r\n+import java.util.function.BiConsumer;\r\n+import java.util.function.Function;\r\n+\r\n+import static org.apache.dubbo.rpc.Constants.INVOCATION_KEY;\r\n+\r\n+/**\r\n+ * {@link AsyncRpcResult} is introduced in 3.0.0 to replace RpcResult, and RpcResult is replaced with {@link AppResponse}:\r\n+ * <ul>\r\n+ *     <li>AsyncRpcResult is the object that is actually passed in the call chain</li>\r\n+ *     <li>AppResponse only simply represents the business result</li>\r\n+ * </ul>\r\n+ * <p>\r\n+ *  The relationship between them can be described as follow, an abstraction of the definition of AsyncRpcResult:\r\n+ *  <pre>\r\n+ *  {@code\r\n+ *   Public class AsyncRpcResult implements CompletionStage<AppResponse> {\r\n+ *       ......\r\n+ *  }\r\n+ * </pre>\r\n+ * AsyncRpcResult is a future representing an unfinished RPC call, while AppResponse is the actual return type of this call.\r\n+ * In theory, AppResponse doesn't have to implement the {@link Result} interface, this is done mainly for compatibility purpose.\r\n+ *\r\n+ * @serial Do not change the class name and properties.\r\n+ */\r\n+public class AppResponse implements Result {\r\n+\r\n+    private static final long serialVersionUID = -6925924956850004727L;\r\n+\r\n+    private Object result;\r\n+\r\n+    private Throwable exception;\r\n+\r\n+    private Map<String, Object> attachments = new HashMap<>();\r\n+\r\n+    private Map<String, Object> attributes = new HashMap<>();\r\n+\r\n+    public AppResponse() {\r\n+    }\r\n+\r\n+    public AppResponse(Invocation invocation) {\r\n+        this.setAttribute(INVOCATION_KEY, invocation);\r\n+    }\r\n+\r\n+    public AppResponse(Object result) {\r\n+        this.result = result;\r\n+    }\r\n+\r\n+    public AppResponse(Throwable exception) {\r\n+        this.exception = exception;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object recreate() throws Throwable {\r\n+        if (exception != null) {\r\n+            // fix issue#619\r\n+            try {\r\n+                Object stackTrace = InvokerInvocationHandler.stackTraceField.get(exception);\r\n+                if (stackTrace == null) {\r\n+                    exception.setStackTrace(new StackTraceElement[0]);\r\n+                }\r\n+            } catch (Exception e) {\r\n+                // ignore\r\n+            }\r\n+            throw exception;\r\n+        }\r\n+        return result;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getValue() {\r\n+        return result;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setValue(Object value) {\r\n+        this.result = value;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Throwable getException() {\r\n+        return exception;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setException(Throwable e) {\r\n+        this.exception = e;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean hasException() {\r\n+        return exception != null;\r\n+    }\r\n+\r\n+    @Override\r\n+    @Deprecated\r\n+    public Map<String, String> getAttachments() {\r\n+        return new AttachmentsAdapter.ObjectToStringMap(attachments);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Map<String, Object> getObjectAttachments() {\r\n+        return attachments;\r\n+    }\r\n+\r\n+    /**\r\n+     * Append all items from the map into the attachment, if map is empty then nothing happens\r\n+     *\r\n+     * @param map contains all key-value pairs to append\r\n+     */\r\n+    public void setAttachments(Map<String, String> map) {\r\n+        this.attachments = map == null ? new HashMap<>() : new HashMap<>(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachments(Map<String, Object> map) {\r\n+        this.attachments = map == null ? new HashMap<>() : map;\r\n+    }\r\n+\r\n+    public void addAttachments(Map<String, String> map) {\r\n+        if (map == null) {\r\n+            return;\r\n+        }\r\n+        if (this.attachments == null) {\r\n+            this.attachments = new HashMap<>();\r\n+        }\r\n+        this.attachments.putAll(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addObjectAttachments(Map<String, Object> map) {\r\n+        if (map == null) {\r\n+            return;\r\n+        }\r\n+        if (this.attachments == null) {\r\n+            this.attachments = new HashMap<>();\r\n+        }\r\n+        this.attachments.putAll(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAttachment(String key) {\r\n+        Object value = attachments.get(key);\r\n+        if (value instanceof String) {\r\n+            return (String) value;\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getObjectAttachment(String key) {\r\n+        return attachments.get(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAttachment(String key, String defaultValue) {\r\n+        Object result = attachments.get(key);\r\n+        if (result == null) {\r\n+            return defaultValue;\r\n+        }\r\n+        if (result instanceof String) {\r\n+            return (String) result;\r\n+        }\r\n+        return defaultValue;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getObjectAttachment(String key, Object defaultValue) {\r\n+        Object result = attachments.get(key);\r\n+        if (result == null) {\r\n+            result = defaultValue;\r\n+        }\r\n+        return result;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachment(String key, String value) {\r\n+        setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachment(String key, Object value) {\r\n+        setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachment(String key, Object value) {\r\n+        attachments.put(key, value);\r\n+    }\r\n+\r\n+    public Object getAttribute(String key) {\r\n+        return attributes.get(key);\r\n+    }\r\n+\r\n+    public void setAttribute(String key, Object value) {\r\n+        attributes.put(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn) {\r\n+        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\r\n+    }\r\n+\r\n+    @Override\r\n+    public <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn) {\r\n+        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result get() throws InterruptedException, ExecutionException {\r\n+        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\r\n+        throw new UnsupportedOperationException(\"AppResponse represents an concrete business response, there will be no status changes, you should get internal values directly.\");\r\n+    }\r\n+\r\n+    public void clear() {\r\n+        this.result = null;\r\n+        this.exception = null;\r\n+        this.attachments.clear();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"AppResponse [value=\" + result + \", exception=\" + exception + \"]\";\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/AsyncContextImpl.java", "source2": "org/apache/dubbo/rpc/AsyncContextImpl.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,78 +1,78 @@\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;\n-\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-public class AsyncContextImpl implements AsyncContext {\n-\n-    private final AtomicBoolean started = new AtomicBoolean(false);\n-    private final AtomicBoolean stopped = new AtomicBoolean(false);\n-\n-    private CompletableFuture<Object> future;\n-\n-    private RpcContext storedContext;\n-    private RpcContext storedServerContext;\n-\n-    public AsyncContextImpl() {\n-        this.storedContext = RpcContext.getContext();\n-        this.storedServerContext = RpcContext.getServerContext();\n-    }\n-\n-    @Override\n-    public void write(Object value) {\n-        if (isAsyncStarted() && stop()) {\n-            if (value instanceof Throwable) {\n-                Throwable bizExe = (Throwable) value;\n-                future.completeExceptionally(bizExe);\n-            } else {\n-                future.complete(value);\n-            }\n-        } else {\n-            throw new IllegalStateException(\"The async response has probably been wrote back by another thread, or the asyncContext has been closed.\");\n-        }\n-    }\n-\n-    @Override\n-    public boolean isAsyncStarted() {\n-        return started.get();\n-    }\n-\n-    @Override\n-    public boolean stop() {\n-        return stopped.compareAndSet(false, true);\n-    }\n-\n-    @Override\n-    public void start() {\n-        if (this.started.compareAndSet(false, true)) {\n-            this.future = new CompletableFuture<>();\n-        }\n-    }\n-\n-    @Override\n-    public void signalContextSwitch() {\n-        RpcContext.restoreContext(storedContext);\n-        RpcContext.restoreServerContext(storedServerContext);\n-        // Restore any other contexts in here if necessary.\n-    }\n-\n-    public CompletableFuture<Object> getInternalFuture() {\n-        return future;\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;\r\n+\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+public class AsyncContextImpl implements AsyncContext {\r\n+\r\n+    private final AtomicBoolean started = new AtomicBoolean(false);\r\n+    private final AtomicBoolean stopped = new AtomicBoolean(false);\r\n+\r\n+    private CompletableFuture<Object> future;\r\n+\r\n+    private RpcContext storedContext;\r\n+    private RpcContext storedServerContext;\r\n+\r\n+    public AsyncContextImpl() {\r\n+        this.storedContext = RpcContext.getContext();\r\n+        this.storedServerContext = RpcContext.getServerContext();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void write(Object value) {\r\n+        if (isAsyncStarted() && stop()) {\r\n+            if (value instanceof Throwable) {\r\n+                Throwable bizExe = (Throwable) value;\r\n+                future.completeExceptionally(bizExe);\r\n+            } else {\r\n+                future.complete(value);\r\n+            }\r\n+        } else {\r\n+            throw new IllegalStateException(\"The async response has probably been wrote back by another thread, or the asyncContext has been closed.\");\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAsyncStarted() {\r\n+        return started.get();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean stop() {\r\n+        return stopped.compareAndSet(false, true);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void start() {\r\n+        if (this.started.compareAndSet(false, true)) {\r\n+            this.future = new CompletableFuture<>();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void signalContextSwitch() {\r\n+        RpcContext.restoreContext(storedContext);\r\n+        RpcContext.restoreServerContext(storedServerContext);\r\n+        // Restore any other contexts in here if necessary.\r\n+    }\r\n+\r\n+    public CompletableFuture<Object> getInternalFuture() {\r\n+        return future;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/AsyncRpcResult.java", "source2": "org/apache/dubbo/rpc/AsyncRpcResult.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,337 +1,337 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.threadpool.ThreadlessExecutor;\n-import org.apache.dubbo.rpc.model.ConsumerMethodModel;\n-\n-import java.util.Map;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.ExecutionException;\n-import java.util.concurrent.Executor;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.TimeoutException;\n-import java.util.function.BiConsumer;\n-import java.util.function.Function;\n-\n-import static org.apache.dubbo.common.utils.ReflectUtils.defaultReturn;\n-\n-/**\n- * This class represents an unfinished RPC call, it will hold some context information for this call, for example RpcContext and Invocation,\n- * so that when the call finishes and the result returns, it can guarantee all the contexts being recovered as the same as when the call was made\n- * before any callback is invoked.\n- * <p>\n- * TODO if it's reasonable or even right to keep a reference to Invocation?\n- * <p>\n- * As {@link Result} implements CompletionStage, {@link AsyncRpcResult} allows you to easily build a async filter chain whose status will be\n- * driven entirely by the state of the underlying RPC call.\n- * <p>\n- * AsyncRpcResult does not contain any concrete value (except the underlying value bring by CompletableFuture), consider it as a status transfer node.\n- * {@link #getValue()} and {@link #getException()} are all inherited from {@link Result} interface, implementing them are mainly\n- * for compatibility consideration. Because many legacy {@link Filter} implementation are most possibly to call getValue directly.\n- */\n-public class AsyncRpcResult implements Result {\n-    private static final Logger logger = LoggerFactory.getLogger(AsyncRpcResult.class);\n-\n-    /**\n-     * RpcContext may already have been changed when callback happens, it happens when the same thread is used to execute another RPC call.\n-     * So we should keep the reference of current RpcContext instance and restore it before callback being executed.\n-     */\n-    private RpcContext storedContext;\n-    private RpcContext storedServerContext;\n-    private Executor executor;\n-\n-    private Invocation invocation;\n-\n-    private CompletableFuture<AppResponse> responseFuture;\n-\n-    public AsyncRpcResult(CompletableFuture<AppResponse> future, Invocation invocation) {\n-        this.responseFuture = future;\n-        this.invocation = invocation;\n-        this.storedContext = RpcContext.getContext();\n-        this.storedServerContext = RpcContext.getServerContext();\n-    }\n-\n-    /**\n-     * Notice the return type of {@link #getValue} is the actual type of the RPC method, not {@link AppResponse}\n-     *\n-     * @return\n-     */\n-    @Override\n-    public Object getValue() {\n-        return getAppResponse().getValue();\n-    }\n-\n-    /**\n-     * CompletableFuture can only be completed once, so try to update the result of one completed CompletableFuture will\n-     * has no effect. To avoid this problem, we check the complete status of this future before update it's value.\n-     *\n-     * But notice that trying to give an uncompleted CompletableFuture a new specified value may face a race condition,\n-     * because the background thread watching the real result will also change the status of this CompletableFuture.\n-     * The result is you may lose the value you expected to set.\n-     *\n-     * @param value\n-     */\n-    @Override\n-    public void setValue(Object value) {\n-        try {\n-            if (responseFuture.isDone()) {\n-                responseFuture.get().setValue(value);\n-            } else {\n-                AppResponse appResponse = new AppResponse(invocation);\n-                appResponse.setValue(value);\n-                responseFuture.complete(appResponse);\n-            }\n-        } catch (Exception e) {\n-            // This should not happen in normal request process;\n-            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\n-            throw new RpcException(e);\n-        }\n-    }\n-\n-    @Override\n-    public Throwable getException() {\n-        return getAppResponse().getException();\n-    }\n-\n-    @Override\n-    public void setException(Throwable t) {\n-        try {\n-            if (responseFuture.isDone()) {\n-                responseFuture.get().setException(t);\n-            } else {\n-                AppResponse appResponse = new AppResponse(invocation);\n-                appResponse.setException(t);\n-                responseFuture.complete(appResponse);\n-            }\n-        } catch (Exception e) {\n-            // This should not happen in normal request process;\n-            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\n-            throw new RpcException(e);\n-        }\n-    }\n-\n-    @Override\n-    public boolean hasException() {\n-        return getAppResponse().hasException();\n-    }\n-\n-    public CompletableFuture<AppResponse> getResponseFuture() {\n-        return responseFuture;\n-    }\n-\n-    public void setResponseFuture(CompletableFuture<AppResponse> responseFuture) {\n-        this.responseFuture = responseFuture;\n-    }\n-\n-    public Result getAppResponse() {\n-        try {\n-            if (responseFuture.isDone()) {\n-                return responseFuture.get();\n-            }\n-        } catch (Exception e) {\n-            // This should not happen in normal request process;\n-            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\n-            throw new RpcException(e);\n-        }\n-\n-        return createDefaultValue(invocation);\n-    }\n-\n-    /**\n-     * This method will always return after a maximum 'timeout' waiting:\n-     * 1. if value returns before timeout, return normally.\n-     * 2. if no value returns after timeout, throw TimeoutException.\n-     *\n-     * @return\n-     * @throws InterruptedException\n-     * @throws ExecutionException\n-     */\n-    @Override\n-    public Result get() throws InterruptedException, ExecutionException {\n-        if (executor != null && executor instanceof ThreadlessExecutor) {\n-            ThreadlessExecutor threadlessExecutor = (ThreadlessExecutor) executor;\n-            threadlessExecutor.waitAndDrain();\n-        }\n-        return responseFuture.get();\n-    }\n-\n-    @Override\n-    public Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\n-        if (executor != null && executor instanceof ThreadlessExecutor) {\n-            ThreadlessExecutor threadlessExecutor = (ThreadlessExecutor) executor;\n-            threadlessExecutor.waitAndDrain();\n-        }\n-        return responseFuture.get(timeout, unit);\n-    }\n-\n-    @Override\n-    public Object recreate() throws Throwable {\n-        RpcInvocation rpcInvocation = (RpcInvocation) invocation;\n-        if (InvokeMode.FUTURE == rpcInvocation.getInvokeMode()) {\n-            return RpcContext.getContext().getFuture();\n-        }\n-\n-        return getAppResponse().recreate();\n-    }\n-\n-    public Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn) {\n-        this.responseFuture = this.responseFuture.whenComplete((v, t) -> {\n-            beforeContext.accept(v, t);\n-            fn.accept(v, t);\n-            afterContext.accept(v, t);\n-        });\n-        return this;\n-    }\n-\n-    @Override\n-    public <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn) {\n-        return this.responseFuture.thenApply(fn);\n-    }\n-\n-    @Override\n-    @Deprecated\n-    public Map<String, String> getAttachments() {\n-        return getAppResponse().getAttachments();\n-    }\n-\n-    @Override\n-    public Map<String, Object> getObjectAttachments() {\n-        return getAppResponse().getObjectAttachments();\n-    }\n-\n-    @Override\n-    public void setAttachments(Map<String, String> map) {\n-        getAppResponse().setAttachments(map);\n-    }\n-\n-    @Override\n-    public void setObjectAttachments(Map<String, Object> map) {\n-        getAppResponse().setObjectAttachments(map);\n-    }\n-\n-    @Deprecated\n-    @Override\n-    public void addAttachments(Map<String, String> map) {\n-        getAppResponse().addAttachments(map);\n-    }\n-\n-    @Override\n-    public void addObjectAttachments(Map<String, Object> map) {\n-        getAppResponse().addObjectAttachments(map);\n-    }\n-\n-    @Override\n-    public String getAttachment(String key) {\n-        return getAppResponse().getAttachment(key);\n-    }\n-\n-    @Override\n-    public Object getObjectAttachment(String key) {\n-        return getAppResponse().getObjectAttachment(key);\n-    }\n-\n-    @Override\n-    public String getAttachment(String key, String defaultValue) {\n-        return getAppResponse().getAttachment(key, defaultValue);\n-    }\n-\n-    @Override\n-    public Object getObjectAttachment(String key, Object defaultValue) {\n-        return getAppResponse().getObjectAttachment(key, defaultValue);\n-    }\n-\n-    @Override\n-    public void setAttachment(String key, String value) {\n-        setObjectAttachment(key, value);\n-    }\n-\n-    @Override\n-    public void setAttachment(String key, Object value) {\n-        setObjectAttachment(key, value);\n-    }\n-\n-    @Override\n-    public void setObjectAttachment(String key, Object value) {\n-        getAppResponse().setAttachment(key, value);\n-    }\n-\n-    public Executor getExecutor() {\n-        return executor;\n-    }\n-\n-    public void setExecutor(Executor executor) {\n-        this.executor = executor;\n-    }\n-\n-    /**\n-     * tmp context to use when the thread switch to Dubbo thread.\n-     */\n-    private RpcContext tmpContext;\n-\n-    private RpcContext tmpServerContext;\n-    private BiConsumer<Result, Throwable> beforeContext = (appResponse, t) -> {\n-        tmpContext = RpcContext.getContext();\n-        tmpServerContext = RpcContext.getServerContext();\n-        RpcContext.restoreContext(storedContext);\n-        RpcContext.restoreServerContext(storedServerContext);\n-    };\n-\n-    private BiConsumer<Result, Throwable> afterContext = (appResponse, t) -> {\n-        RpcContext.restoreContext(tmpContext);\n-        RpcContext.restoreServerContext(tmpServerContext);\n-    };\n-\n-    /**\n-     * Some utility methods used to quickly generate default AsyncRpcResult instance.\n-     */\n-    public static AsyncRpcResult newDefaultAsyncResult(AppResponse appResponse, Invocation invocation) {\n-        return new AsyncRpcResult(CompletableFuture.completedFuture(appResponse), invocation);\n-    }\n-\n-    public static AsyncRpcResult newDefaultAsyncResult(Invocation invocation) {\n-        return newDefaultAsyncResult(null, null, invocation);\n-    }\n-\n-    public static AsyncRpcResult newDefaultAsyncResult(Object value, Invocation invocation) {\n-        return newDefaultAsyncResult(value, null, invocation);\n-    }\n-\n-    public static AsyncRpcResult newDefaultAsyncResult(Throwable t, Invocation invocation) {\n-        return newDefaultAsyncResult(null, t, invocation);\n-    }\n-\n-    public static AsyncRpcResult newDefaultAsyncResult(Object value, Throwable t, Invocation invocation) {\n-        CompletableFuture<AppResponse> future = new CompletableFuture<>();\n-        AppResponse result = new AppResponse(invocation);\n-        if (t != null) {\n-            result.setException(t);\n-        } else {\n-            result.setValue(value);\n-        }\n-        future.complete(result);\n-        return new AsyncRpcResult(future, invocation);\n-    }\n-\n-    private static Result createDefaultValue(Invocation invocation) {\n-        ConsumerMethodModel method = (ConsumerMethodModel) invocation.get(Constants.METHOD_MODEL);\n-        return method != null ? new AppResponse(defaultReturn(method.getReturnClass())) : new AppResponse();\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;\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.common.threadpool.ThreadlessExecutor;\r\n+import org.apache.dubbo.rpc.model.ConsumerMethodModel;\r\n+\r\n+import java.util.Map;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.ExecutionException;\r\n+import java.util.concurrent.Executor;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.TimeoutException;\r\n+import java.util.function.BiConsumer;\r\n+import java.util.function.Function;\r\n+\r\n+import static org.apache.dubbo.common.utils.ReflectUtils.defaultReturn;\r\n+\r\n+/**\r\n+ * This class represents an unfinished RPC call, it will hold some context information for this call, for example RpcContext and Invocation,\r\n+ * so that when the call finishes and the result returns, it can guarantee all the contexts being recovered as the same as when the call was made\r\n+ * before any callback is invoked.\r\n+ * <p>\r\n+ * TODO if it's reasonable or even right to keep a reference to Invocation?\r\n+ * <p>\r\n+ * As {@link Result} implements CompletionStage, {@link AsyncRpcResult} allows you to easily build a async filter chain whose status will be\r\n+ * driven entirely by the state of the underlying RPC call.\r\n+ * <p>\r\n+ * AsyncRpcResult does not contain any concrete value (except the underlying value bring by CompletableFuture), consider it as a status transfer node.\r\n+ * {@link #getValue()} and {@link #getException()} are all inherited from {@link Result} interface, implementing them are mainly\r\n+ * for compatibility consideration. Because many legacy {@link Filter} implementation are most possibly to call getValue directly.\r\n+ */\r\n+public class AsyncRpcResult implements Result {\r\n+    private static final Logger logger = LoggerFactory.getLogger(AsyncRpcResult.class);\r\n+\r\n+    /**\r\n+     * RpcContext may already have been changed when callback happens, it happens when the same thread is used to execute another RPC call.\r\n+     * So we should keep the reference of current RpcContext instance and restore it before callback being executed.\r\n+     */\r\n+    private RpcContext storedContext;\r\n+    private RpcContext storedServerContext;\r\n+    private Executor executor;\r\n+\r\n+    private Invocation invocation;\r\n+\r\n+    private CompletableFuture<AppResponse> responseFuture;\r\n+\r\n+    public AsyncRpcResult(CompletableFuture<AppResponse> future, Invocation invocation) {\r\n+        this.responseFuture = future;\r\n+        this.invocation = invocation;\r\n+        this.storedContext = RpcContext.getContext();\r\n+        this.storedServerContext = RpcContext.getServerContext();\r\n+    }\r\n+\r\n+    /**\r\n+     * Notice the return type of {@link #getValue} is the actual type of the RPC method, not {@link AppResponse}\r\n+     *\r\n+     * @return\r\n+     */\r\n+    @Override\r\n+    public Object getValue() {\r\n+        return getAppResponse().getValue();\r\n+    }\r\n+\r\n+    /**\r\n+     * CompletableFuture can only be completed once, so try to update the result of one completed CompletableFuture will\r\n+     * has no effect. To avoid this problem, we check the complete status of this future before update it's value.\r\n+     *\r\n+     * But notice that trying to give an uncompleted CompletableFuture a new specified value may face a race condition,\r\n+     * because the background thread watching the real result will also change the status of this CompletableFuture.\r\n+     * The result is you may lose the value you expected to set.\r\n+     *\r\n+     * @param value\r\n+     */\r\n+    @Override\r\n+    public void setValue(Object value) {\r\n+        try {\r\n+            if (responseFuture.isDone()) {\r\n+                responseFuture.get().setValue(value);\r\n+            } else {\r\n+                AppResponse appResponse = new AppResponse(invocation);\r\n+                appResponse.setValue(value);\r\n+                responseFuture.complete(appResponse);\r\n+            }\r\n+        } catch (Exception e) {\r\n+            // This should not happen in normal request process;\r\n+            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\r\n+            throw new RpcException(e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public Throwable getException() {\r\n+        return getAppResponse().getException();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setException(Throwable t) {\r\n+        try {\r\n+            if (responseFuture.isDone()) {\r\n+                responseFuture.get().setException(t);\r\n+            } else {\r\n+                AppResponse appResponse = new AppResponse(invocation);\r\n+                appResponse.setException(t);\r\n+                responseFuture.complete(appResponse);\r\n+            }\r\n+        } catch (Exception e) {\r\n+            // This should not happen in normal request process;\r\n+            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\r\n+            throw new RpcException(e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean hasException() {\r\n+        return getAppResponse().hasException();\r\n+    }\r\n+\r\n+    public CompletableFuture<AppResponse> getResponseFuture() {\r\n+        return responseFuture;\r\n+    }\r\n+\r\n+    public void setResponseFuture(CompletableFuture<AppResponse> responseFuture) {\r\n+        this.responseFuture = responseFuture;\r\n+    }\r\n+\r\n+    public Result getAppResponse() {\r\n+        try {\r\n+            if (responseFuture.isDone()) {\r\n+                return responseFuture.get();\r\n+            }\r\n+        } catch (Exception e) {\r\n+            // This should not happen in normal request process;\r\n+            logger.error(\"Got exception when trying to fetch the underlying result from AsyncRpcResult.\");\r\n+            throw new RpcException(e);\r\n+        }\r\n+\r\n+        return createDefaultValue(invocation);\r\n+    }\r\n+\r\n+    /**\r\n+     * This method will always return after a maximum 'timeout' waiting:\r\n+     * 1. if value returns before timeout, return normally.\r\n+     * 2. if no value returns after timeout, throw TimeoutException.\r\n+     *\r\n+     * @return\r\n+     * @throws InterruptedException\r\n+     * @throws ExecutionException\r\n+     */\r\n+    @Override\r\n+    public Result get() throws InterruptedException, ExecutionException {\r\n+        if (executor != null && executor instanceof ThreadlessExecutor) {\r\n+            ThreadlessExecutor threadlessExecutor = (ThreadlessExecutor) executor;\r\n+            threadlessExecutor.waitAndDrain();\r\n+        }\r\n+        return responseFuture.get();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\r\n+        if (executor != null && executor instanceof ThreadlessExecutor) {\r\n+            ThreadlessExecutor threadlessExecutor = (ThreadlessExecutor) executor;\r\n+            threadlessExecutor.waitAndDrain();\r\n+        }\r\n+        return responseFuture.get(timeout, unit);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object recreate() throws Throwable {\r\n+        RpcInvocation rpcInvocation = (RpcInvocation) invocation;\r\n+        if (InvokeMode.FUTURE == rpcInvocation.getInvokeMode()) {\r\n+            return RpcContext.getContext().getFuture();\r\n+        }\r\n+\r\n+        return getAppResponse().recreate();\r\n+    }\r\n+\r\n+    public Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn) {\r\n+        this.responseFuture = this.responseFuture.whenComplete((v, t) -> {\r\n+            beforeContext.accept(v, t);\r\n+            fn.accept(v, t);\r\n+            afterContext.accept(v, t);\r\n+        });\r\n+        return this;\r\n+    }\r\n+\r\n+    @Override\r\n+    public <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn) {\r\n+        return this.responseFuture.thenApply(fn);\r\n+    }\r\n+\r\n+    @Override\r\n+    @Deprecated\r\n+    public Map<String, String> getAttachments() {\r\n+        return getAppResponse().getAttachments();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Map<String, Object> getObjectAttachments() {\r\n+        return getAppResponse().getObjectAttachments();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachments(Map<String, String> map) {\r\n+        getAppResponse().setAttachments(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachments(Map<String, Object> map) {\r\n+        getAppResponse().setObjectAttachments(map);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    @Override\r\n+    public void addAttachments(Map<String, String> map) {\r\n+        getAppResponse().addAttachments(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void addObjectAttachments(Map<String, Object> map) {\r\n+        getAppResponse().addObjectAttachments(map);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAttachment(String key) {\r\n+        return getAppResponse().getAttachment(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getObjectAttachment(String key) {\r\n+        return getAppResponse().getObjectAttachment(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAttachment(String key, String defaultValue) {\r\n+        return getAppResponse().getAttachment(key, defaultValue);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getObjectAttachment(String key, Object defaultValue) {\r\n+        return getAppResponse().getObjectAttachment(key, defaultValue);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachment(String key, String value) {\r\n+        setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachment(String key, Object value) {\r\n+        setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachment(String key, Object value) {\r\n+        getAppResponse().setAttachment(key, value);\r\n+    }\r\n+\r\n+    public Executor getExecutor() {\r\n+        return executor;\r\n+    }\r\n+\r\n+    public void setExecutor(Executor executor) {\r\n+        this.executor = executor;\r\n+    }\r\n+\r\n+    /**\r\n+     * tmp context to use when the thread switch to Dubbo thread.\r\n+     */\r\n+    private RpcContext tmpContext;\r\n+\r\n+    private RpcContext tmpServerContext;\r\n+    private BiConsumer<Result, Throwable> beforeContext = (appResponse, t) -> {\r\n+        tmpContext = RpcContext.getContext();\r\n+        tmpServerContext = RpcContext.getServerContext();\r\n+        RpcContext.restoreContext(storedContext);\r\n+        RpcContext.restoreServerContext(storedServerContext);\r\n+    };\r\n+\r\n+    private BiConsumer<Result, Throwable> afterContext = (appResponse, t) -> {\r\n+        RpcContext.restoreContext(tmpContext);\r\n+        RpcContext.restoreServerContext(tmpServerContext);\r\n+    };\r\n+\r\n+    /**\r\n+     * Some utility methods used to quickly generate default AsyncRpcResult instance.\r\n+     */\r\n+    public static AsyncRpcResult newDefaultAsyncResult(AppResponse appResponse, Invocation invocation) {\r\n+        return new AsyncRpcResult(CompletableFuture.completedFuture(appResponse), invocation);\r\n+    }\r\n+\r\n+    public static AsyncRpcResult newDefaultAsyncResult(Invocation invocation) {\r\n+        return newDefaultAsyncResult(null, null, invocation);\r\n+    }\r\n+\r\n+    public static AsyncRpcResult newDefaultAsyncResult(Object value, Invocation invocation) {\r\n+        return newDefaultAsyncResult(value, null, invocation);\r\n+    }\r\n+\r\n+    public static AsyncRpcResult newDefaultAsyncResult(Throwable t, Invocation invocation) {\r\n+        return newDefaultAsyncResult(null, t, invocation);\r\n+    }\r\n+\r\n+    public static AsyncRpcResult newDefaultAsyncResult(Object value, Throwable t, Invocation invocation) {\r\n+        CompletableFuture<AppResponse> future = new CompletableFuture<>();\r\n+        AppResponse result = new AppResponse(invocation);\r\n+        if (t != null) {\r\n+            result.setException(t);\r\n+        } else {\r\n+            result.setValue(value);\r\n+        }\r\n+        future.complete(result);\r\n+        return new AsyncRpcResult(future, invocation);\r\n+    }\r\n+\r\n+    private static Result createDefaultValue(Invocation invocation) {\r\n+        ConsumerMethodModel method = (ConsumerMethodModel) invocation.get(Constants.METHOD_MODEL);\r\n+        return method != null ? new AppResponse(defaultReturn(method.getReturnClass())) : new AppResponse();\r\n+    }\r\n+}\r\n+\r\n"}, {"source1": "org/apache/dubbo/rpc/AttachmentsAdapter.java", "source2": "org/apache/dubbo/rpc/AttachmentsAdapter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,72 +1,72 @@\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;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-\n-/**\n- * This class provides map adapters to support attachments in RpcContext, Invocation and Result switch from\n- * <String, String> to <String, Object>\n- */\n-public class AttachmentsAdapter {\n-\n-    public static class ObjectToStringMap extends HashMap<String, String> {\n-        private Map<String, Object> attachments;\n-\n-        public ObjectToStringMap(Map<String, Object> attachments) {\n-            for (Entry<String, Object> entry : attachments.entrySet()) {\n-                String convertResult = convert(entry.getValue());\n-                if (convertResult != null) {\n-                    super.put(entry.getKey(), convertResult);\n-                }\n-            }\n-            this.attachments = attachments;\n-        }\n-\n-        @Override\n-        public String put(String key, String value) {\n-            attachments.put(key, value);\n-            return super.put(key, value);\n-        }\n-\n-        @Override\n-        public String remove(Object key) {\n-            attachments.remove(key);\n-            return super.remove(key);\n-        }\n-\n-        private String convert(Object obj) {\n-            if (obj instanceof String) {\n-                return (String) obj;\n-            }\n-            return null; // or JSON.toString(obj);\n-        }\n-\n-        @Override\n-        public void clear() {\n-            attachments.clear();\n-            super.clear();\n-        }\n-\n-        @Override\n-        public void putAll(Map<? extends String, ? extends String> map) {\n-            attachments.putAll(map);\n-            super.putAll(map);\n-        }\n-    }\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.rpc;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * This class provides map adapters to support attachments in RpcContext, Invocation and Result switch from\r\n+ * <String, String> to <String, Object>\r\n+ */\r\n+public class AttachmentsAdapter {\r\n+\r\n+    public static class ObjectToStringMap extends HashMap<String, String> {\r\n+        private Map<String, Object> attachments;\r\n+\r\n+        public ObjectToStringMap(Map<String, Object> attachments) {\r\n+            for (Entry<String, Object> entry : attachments.entrySet()) {\r\n+                String convertResult = convert(entry.getValue());\r\n+                if (convertResult != null) {\r\n+                    super.put(entry.getKey(), convertResult);\r\n+                }\r\n+            }\r\n+            this.attachments = attachments;\r\n+        }\r\n+\r\n+        @Override\r\n+        public String put(String key, String value) {\r\n+            attachments.put(key, value);\r\n+            return super.put(key, value);\r\n+        }\r\n+\r\n+        @Override\r\n+        public String remove(Object key) {\r\n+            attachments.remove(key);\r\n+            return super.remove(key);\r\n+        }\r\n+\r\n+        private String convert(Object obj) {\r\n+            if (obj instanceof String) {\r\n+                return (String) obj;\r\n+            }\r\n+            return null; // or JSON.toString(obj);\r\n+        }\r\n+\r\n+        @Override\r\n+        public void clear() {\r\n+            attachments.clear();\r\n+            super.clear();\r\n+        }\r\n+\r\n+        @Override\r\n+        public void putAll(Map<? extends String, ? extends String> map) {\r\n+            attachments.putAll(map);\r\n+            super.putAll(map);\r\n+        }\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/Constants.java", "source2": "org/apache/dubbo/rpc/Constants.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,97 +1,97 @@\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-\n-package org.apache.dubbo.rpc;\n-\n-public interface Constants {\n-    String LOCAL_KEY = \"local\";\n-\n-    String STUB_KEY = \"stub\";\n-\n-    String MOCK_KEY = \"mock\";\n-\n-    String DEPRECATED_KEY = \"deprecated\";\n-\n-    String $ECHO = \"$echo\";\n-    String $ECHO_PARAMETER_DESC = \"Ljava/lang/Object;\";\n-\n-    String RETURN_PREFIX = \"return \";\n-\n-    String THROW_PREFIX = \"throw\";\n-\n-    String FAIL_PREFIX = \"fail:\";\n-\n-    String FORCE_PREFIX = \"force:\";\n-\n-    String MERGER_KEY = \"merger\";\n-\n-    String IS_SERVER_KEY = \"isserver\";\n-\n-    String FORCE_USE_TAG = \"dubbo.force.tag\";\n-\n-    String TPS_LIMIT_RATE_KEY = \"tps\";\n-\n-    String TPS_LIMIT_INTERVAL_KEY = \"tps.interval\";\n-\n-    long DEFAULT_TPS_LIMIT_INTERVAL = 60 * 1000;\n-\n-    String AUTO_ATTACH_INVOCATIONID_KEY = \"invocationid.autoattach\";\n-\n-    boolean DEFAULT_STUB_EVENT = false;\n-\n-    String STUB_EVENT_METHODS_KEY = \"dubbo.stub.event.methods\";\n-\n-    String PROXY_KEY = \"proxy\";\n-\n-    String EXECUTES_KEY = \"executes\";\n-\n-    String ACCESS_LOG_KEY = \"accesslog\";\n-\n-    String ACTIVES_KEY = \"actives\";\n-\n-    String ID_KEY = \"id\";\n-\n-    String ASYNC_KEY = \"async\";\n-\n-    String RETURN_KEY = \"return\";\n-\n-    String TOKEN_KEY = \"token\";\n-\n-    String INTERFACE = \"interface\";\n-\n-    String INTERFACES = \"interfaces\";\n-\n-    String GENERIC_KEY = \"generic\";\n-\n-    String LOCAL_PROTOCOL = \"injvm\";\n-\n-    String DEFAULT_REMOTING_SERVER = \"netty\";\n-\n-    String SCOPE_KEY = \"scope\";\n-    String SCOPE_LOCAL = \"local\";\n-    String SCOPE_REMOTE = \"remote\";\n-\n-    String INPUT_KEY = \"input\";\n-    String OUTPUT_KEY = \"output\";\n-\n-    String CONSUMER_MODEL = \"consumerModel\";\n-    String METHOD_MODEL = \"methodModel\";\n-\n-    String SERIALIZATION_SECURITY_CHECK_KEY = \"serialization.security.check\";\n-    String INVOCATION_KEY = \"invocation\";\n-    String SERIALIZATION_ID_KEY = \"serialization_id\";\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+\r\n+package org.apache.dubbo.rpc;\r\n+\r\n+public interface Constants {\r\n+    String LOCAL_KEY = \"local\";\r\n+\r\n+    String STUB_KEY = \"stub\";\r\n+\r\n+    String MOCK_KEY = \"mock\";\r\n+\r\n+    String DEPRECATED_KEY = \"deprecated\";\r\n+\r\n+    String $ECHO = \"$echo\";\r\n+    String $ECHO_PARAMETER_DESC = \"Ljava/lang/Object;\";\r\n+\r\n+    String RETURN_PREFIX = \"return \";\r\n+\r\n+    String THROW_PREFIX = \"throw\";\r\n+\r\n+    String FAIL_PREFIX = \"fail:\";\r\n+\r\n+    String FORCE_PREFIX = \"force:\";\r\n+\r\n+    String MERGER_KEY = \"merger\";\r\n+\r\n+    String IS_SERVER_KEY = \"isserver\";\r\n+\r\n+    String FORCE_USE_TAG = \"dubbo.force.tag\";\r\n+\r\n+    String TPS_LIMIT_RATE_KEY = \"tps\";\r\n+\r\n+    String TPS_LIMIT_INTERVAL_KEY = \"tps.interval\";\r\n+\r\n+    long DEFAULT_TPS_LIMIT_INTERVAL = 60 * 1000;\r\n+\r\n+    String AUTO_ATTACH_INVOCATIONID_KEY = \"invocationid.autoattach\";\r\n+\r\n+    boolean DEFAULT_STUB_EVENT = false;\r\n+\r\n+    String STUB_EVENT_METHODS_KEY = \"dubbo.stub.event.methods\";\r\n+\r\n+    String PROXY_KEY = \"proxy\";\r\n+\r\n+    String EXECUTES_KEY = \"executes\";\r\n+\r\n+    String ACCESS_LOG_KEY = \"accesslog\";\r\n+\r\n+    String ACTIVES_KEY = \"actives\";\r\n+\r\n+    String ID_KEY = \"id\";\r\n+\r\n+    String ASYNC_KEY = \"async\";\r\n+\r\n+    String RETURN_KEY = \"return\";\r\n+\r\n+    String TOKEN_KEY = \"token\";\r\n+\r\n+    String INTERFACE = \"interface\";\r\n+\r\n+    String INTERFACES = \"interfaces\";\r\n+\r\n+    String GENERIC_KEY = \"generic\";\r\n+\r\n+    String LOCAL_PROTOCOL = \"injvm\";\r\n+\r\n+    String DEFAULT_REMOTING_SERVER = \"netty\";\r\n+\r\n+    String SCOPE_KEY = \"scope\";\r\n+    String SCOPE_LOCAL = \"local\";\r\n+    String SCOPE_REMOTE = \"remote\";\r\n+\r\n+    String INPUT_KEY = \"input\";\r\n+    String OUTPUT_KEY = \"output\";\r\n+\r\n+    String CONSUMER_MODEL = \"consumerModel\";\r\n+    String METHOD_MODEL = \"methodModel\";\r\n+\r\n+    String SERIALIZATION_SECURITY_CHECK_KEY = \"serialization.security.check\";\r\n+    String INVOCATION_KEY = \"invocation\";\r\n+    String SERIALIZATION_ID_KEY = \"serialization_id\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/FutureContext.java", "source2": "org/apache/dubbo/rpc/FutureContext.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,108 +1,108 @@\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;\n-\n-import org.apache.dubbo.common.threadlocal.InternalThreadLocal;\n-import org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter;\n-\n-import java.util.concurrent.CompletableFuture;\n-\n-/**\n- * Used for async call scenario. But if the method you are calling has a {@link CompletableFuture<?>} signature\n- * you do not need to use this class since you will get a Future response directly.\n- * <p>\n- * Remember to save the Future reference before making another call using the same thread, otherwise,\n- * the current Future will be override by the new one, which means you will lose the chance get the return value.\n- */\n-public class FutureContext {\n-\n-    private static InternalThreadLocal<FutureContext> futureTL = new InternalThreadLocal<FutureContext>() {\n-        @Override\n-        protected FutureContext initialValue() {\n-            return new FutureContext();\n-        }\n-    };\n-\n-    public static FutureContext getContext() {\n-        return futureTL.get();\n-    }\n-\n-    private CompletableFuture<?> future;\n-    private CompletableFuture<?> compatibleFuture;\n-\n-    /**\n-     * get future.\n-     *\n-     * @param <T>\n-     * @return future\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> CompletableFuture<T> getCompletableFuture() {\n-        return (CompletableFuture<T>) future;\n-    }\n-\n-    /**\n-     * set future.\n-     *\n-     * @param future\n-     */\n-    public void setFuture(CompletableFuture<?> future) {\n-        this.future = future;\n-    }\n-\n-    @Deprecated\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> CompletableFuture<T> getCompatibleCompletableFuture() {\n-        return (CompletableFuture<T>) compatibleFuture;\n-    }\n-\n-    /**\n-     * Guarantee 'using org.apache.dubbo.rpc.RpcContext.getFuture() before proxy returns' can work, a typical scenario is:\n-     * <pre>{@code\n-     *      public final class TracingFilter implements Filter {\n-     *          public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\n-     *              Result result = invoker.invoke(invocation);\n-     *              Future<Object> future = rpcContext.getFuture();\n-     *              if (future instanceof FutureAdapter) {\n-     *                  ((FutureAdapter) future).getFuture().setCallback(new FinishSpanCallback(span));\n-     *               }\n-     *              ......\n-     *          }\n-     *      }\n-     * }</pre>\n-     *\n-     * Start from 2.7.3, you don't have to get Future from RpcContext, we recommend using Result directly:\n-     * <pre>{@code\n-     *      public final class TracingFilter implements Filter {\n-     *          public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\n-     *              Result result = invoker.invoke(invocation);\n-     *              result.getResponseFuture().whenComplete(new FinishSpanCallback(span));\n-     *              ......\n-     *          }\n-     *      }\n-     * }</pre>\n-     *\n-     */\n-    @Deprecated\n-    public void setCompatibleFuture(CompletableFuture<?> compatibleFuture) {\n-        this.compatibleFuture = compatibleFuture;\n-        if (compatibleFuture != null) {\n-            this.setFuture(new FutureAdapter(compatibleFuture));\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;\r\n+\r\n+import org.apache.dubbo.common.threadlocal.InternalThreadLocal;\r\n+import org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter;\r\n+\r\n+import java.util.concurrent.CompletableFuture;\r\n+\r\n+/**\r\n+ * Used for async call scenario. But if the method you are calling has a {@link CompletableFuture<?>} signature\r\n+ * you do not need to use this class since you will get a Future response directly.\r\n+ * <p>\r\n+ * Remember to save the Future reference before making another call using the same thread, otherwise,\r\n+ * the current Future will be override by the new one, which means you will lose the chance get the return value.\r\n+ */\r\n+public class FutureContext {\r\n+\r\n+    private static InternalThreadLocal<FutureContext> futureTL = new InternalThreadLocal<FutureContext>() {\r\n+        @Override\r\n+        protected FutureContext initialValue() {\r\n+            return new FutureContext();\r\n+        }\r\n+    };\r\n+\r\n+    public static FutureContext getContext() {\r\n+        return futureTL.get();\r\n+    }\r\n+\r\n+    private CompletableFuture<?> future;\r\n+    private CompletableFuture<?> compatibleFuture;\r\n+\r\n+    /**\r\n+     * get future.\r\n+     *\r\n+     * @param <T>\r\n+     * @return future\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> CompletableFuture<T> getCompletableFuture() {\r\n+        return (CompletableFuture<T>) future;\r\n+    }\r\n+\r\n+    /**\r\n+     * set future.\r\n+     *\r\n+     * @param future\r\n+     */\r\n+    public void setFuture(CompletableFuture<?> future) {\r\n+        this.future = future;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> CompletableFuture<T> getCompatibleCompletableFuture() {\r\n+        return (CompletableFuture<T>) compatibleFuture;\r\n+    }\r\n+\r\n+    /**\r\n+     * Guarantee 'using org.apache.dubbo.rpc.RpcContext.getFuture() before proxy returns' can work, a typical scenario is:\r\n+     * <pre>{@code\r\n+     *      public final class TracingFilter implements Filter {\r\n+     *          public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\r\n+     *              Result result = invoker.invoke(invocation);\r\n+     *              Future<Object> future = rpcContext.getFuture();\r\n+     *              if (future instanceof FutureAdapter) {\r\n+     *                  ((FutureAdapter) future).getFuture().setCallback(new FinishSpanCallback(span));\r\n+     *               }\r\n+     *              ......\r\n+     *          }\r\n+     *      }\r\n+     * }</pre>\r\n+     *\r\n+     * Start from 2.7.3, you don't have to get Future from RpcContext, we recommend using Result directly:\r\n+     * <pre>{@code\r\n+     *      public final class TracingFilter implements Filter {\r\n+     *          public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\r\n+     *              Result result = invoker.invoke(invocation);\r\n+     *              result.getResponseFuture().whenComplete(new FinishSpanCallback(span));\r\n+     *              ......\r\n+     *          }\r\n+     *      }\r\n+     * }</pre>\r\n+     *\r\n+     */\r\n+    @Deprecated\r\n+    public void setCompatibleFuture(CompletableFuture<?> compatibleFuture) {\r\n+        this.compatibleFuture = compatibleFuture;\r\n+        if (compatibleFuture != null) {\r\n+            this.setFuture(new FutureAdapter(compatibleFuture));\r\n+        }\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/Invocation.java", "source2": "org/apache/dubbo/rpc/Invocation.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,141 +1,141 @@\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;\n-\n-import org.apache.dubbo.common.Experimental;\n-\n-import java.util.Map;\n-import java.util.stream.Stream;\n-\n-/**\n- * Invocation. (API, Prototype, NonThreadSafe)\n- *\n- * @serial Don't change the class name and package name.\n- * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\n- * @see org.apache.dubbo.rpc.RpcInvocation\n- */\n-public interface Invocation {\n-\n-    String getTargetServiceUniqueName();\n-\n-    String getProtocolServiceKey();\n-\n-    /**\n-     * get method name.\n-     *\n-     * @return method name.\n-     * @serial\n-     */\n-    String getMethodName();\n-\n-\n-    /**\n-     * get the interface name\n-     * @return\n-     */\n-    String getServiceName();\n-\n-    /**\n-     * get parameter types.\n-     *\n-     * @return parameter types.\n-     * @serial\n-     */\n-    Class<?>[] getParameterTypes();\n-\n-    /**\n-     * get parameter's signature, string representation of parameter types.\n-     *\n-     * @return parameter's signature\n-     */\n-    default String[] getCompatibleParamSignatures() {\n-        return Stream.of(getParameterTypes())\n-                .map(Class::getName)\n-                .toArray(String[]::new);\n-    }\n-\n-    /**\n-     * get arguments.\n-     *\n-     * @return arguments.\n-     * @serial\n-     */\n-    Object[] getArguments();\n-\n-    /**\n-     * get attachments.\n-     *\n-     * @return attachments.\n-     * @serial\n-     */\n-    Map<String, String> getAttachments();\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Map<String, Object> getObjectAttachments();\n-\n-    void setAttachment(String key, String value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setAttachment(String key, Object value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setObjectAttachment(String key, Object value);\n-\n-    void setAttachmentIfAbsent(String key, String value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setAttachmentIfAbsent(String key, Object value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setObjectAttachmentIfAbsent(String key, Object value);\n-\n-    /**\n-     * get attachment by key.\n-     *\n-     * @return attachment value.\n-     * @serial\n-     */\n-    String getAttachment(String key);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Object getObjectAttachment(String key);\n-\n-    /**\n-     * get attachment by key with default value.\n-     *\n-     * @return attachment value.\n-     * @serial\n-     */\n-    String getAttachment(String key, String defaultValue);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Object getObjectAttachment(String key, Object defaultValue);\n-\n-    /**\n-     * get the invoker in current context.\n-     *\n-     * @return invoker.\n-     * @transient\n-     */\n-    Invoker<?> getInvoker();\n-\n-    Object put(Object key, Object value);\n-\n-    Object get(Object key);\n-\n-    Map<Object, Object> getAttributes();\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;\r\n+\r\n+import org.apache.dubbo.common.Experimental;\r\n+\r\n+import java.util.Map;\r\n+import java.util.stream.Stream;\r\n+\r\n+/**\r\n+ * Invocation. (API, Prototype, NonThreadSafe)\r\n+ *\r\n+ * @serial Don't change the class name and package name.\r\n+ * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\r\n+ * @see org.apache.dubbo.rpc.RpcInvocation\r\n+ */\r\n+public interface Invocation {\r\n+\r\n+    String getTargetServiceUniqueName();\r\n+\r\n+    String getProtocolServiceKey();\r\n+\r\n+    /**\r\n+     * get method name.\r\n+     *\r\n+     * @return method name.\r\n+     * @serial\r\n+     */\r\n+    String getMethodName();\r\n+\r\n+\r\n+    /**\r\n+     * get the interface name\r\n+     * @return\r\n+     */\r\n+    String getServiceName();\r\n+\r\n+    /**\r\n+     * get parameter types.\r\n+     *\r\n+     * @return parameter types.\r\n+     * @serial\r\n+     */\r\n+    Class<?>[] getParameterTypes();\r\n+\r\n+    /**\r\n+     * get parameter's signature, string representation of parameter types.\r\n+     *\r\n+     * @return parameter's signature\r\n+     */\r\n+    default String[] getCompatibleParamSignatures() {\r\n+        return Stream.of(getParameterTypes())\r\n+                .map(Class::getName)\r\n+                .toArray(String[]::new);\r\n+    }\r\n+\r\n+    /**\r\n+     * get arguments.\r\n+     *\r\n+     * @return arguments.\r\n+     * @serial\r\n+     */\r\n+    Object[] getArguments();\r\n+\r\n+    /**\r\n+     * get attachments.\r\n+     *\r\n+     * @return attachments.\r\n+     * @serial\r\n+     */\r\n+    Map<String, String> getAttachments();\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Map<String, Object> getObjectAttachments();\r\n+\r\n+    void setAttachment(String key, String value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setAttachment(String key, Object value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setObjectAttachment(String key, Object value);\r\n+\r\n+    void setAttachmentIfAbsent(String key, String value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setAttachmentIfAbsent(String key, Object value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setObjectAttachmentIfAbsent(String key, Object value);\r\n+\r\n+    /**\r\n+     * get attachment by key.\r\n+     *\r\n+     * @return attachment value.\r\n+     * @serial\r\n+     */\r\n+    String getAttachment(String key);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Object getObjectAttachment(String key);\r\n+\r\n+    /**\r\n+     * get attachment by key with default value.\r\n+     *\r\n+     * @return attachment value.\r\n+     * @serial\r\n+     */\r\n+    String getAttachment(String key, String defaultValue);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Object getObjectAttachment(String key, Object defaultValue);\r\n+\r\n+    /**\r\n+     * get the invoker in current context.\r\n+     *\r\n+     * @return invoker.\r\n+     * @transient\r\n+     */\r\n+    Invoker<?> getInvoker();\r\n+\r\n+    Object put(Object key, Object value);\r\n+\r\n+    Object get(Object key);\r\n+\r\n+    Map<Object, Object> getAttributes();\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/InvokeMode.java", "source2": "org/apache/dubbo/rpc/InvokeMode.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,23 +1,23 @@\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;\n-\n-public enum InvokeMode {\n-\n-    SYNC, ASYNC, FUTURE;\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;\r\n+\r\n+public enum InvokeMode {\r\n+\r\n+    SYNC, ASYNC, FUTURE;\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/ListenableFilter.java", "source2": "org/apache/dubbo/rpc/ListenableFilter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,53 +1,53 @@\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;\n-\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-/**\n- * It's recommended to implement Filter.Listener directly for callback registration, check the default implementation,\n- * see {@link org.apache.dubbo.rpc.filter.ExceptionFilter}, for example.\n- * <p>\n- * If you do not want to share Listener instance between RPC calls. You can use ListenableFilter\n- * to keep a 'one Listener each RPC call' model.\n- */\n-public abstract class ListenableFilter implements Filter {\n-\n-    protected Listener listener = null;\n-    protected final ConcurrentMap<Invocation, Listener> listeners = new ConcurrentHashMap<>();\n-\n-    public Listener listener() {\n-        return listener;\n-    }\n-\n-    public Listener listener(Invocation invocation) {\n-        Listener invListener = listeners.get(invocation);\n-        if (invListener == null) {\n-            invListener = listener;\n-        }\n-        return invListener;\n-    }\n-\n-    public void addListener(Invocation invocation, Listener listener) {\n-        listeners.putIfAbsent(invocation, listener);\n-    }\n-\n-    public void removeListener(Invocation invocation) {\n-        listeners.remove(invocation);\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;\r\n+\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+/**\r\n+ * It's recommended to implement Filter.Listener directly for callback registration, check the default implementation,\r\n+ * see {@link org.apache.dubbo.rpc.filter.ExceptionFilter}, for example.\r\n+ * <p>\r\n+ * If you do not want to share Listener instance between RPC calls. You can use ListenableFilter\r\n+ * to keep a 'one Listener each RPC call' model.\r\n+ */\r\n+public abstract class ListenableFilter implements Filter {\r\n+\r\n+    protected Listener listener = null;\r\n+    protected final ConcurrentMap<Invocation, Listener> listeners = new ConcurrentHashMap<>();\r\n+\r\n+    public Listener listener() {\r\n+        return listener;\r\n+    }\r\n+\r\n+    public Listener listener(Invocation invocation) {\r\n+        Listener invListener = listeners.get(invocation);\r\n+        if (invListener == null) {\r\n+            invListener = listener;\r\n+        }\r\n+        return invListener;\r\n+    }\r\n+\r\n+    public void addListener(Invocation invocation, Listener listener) {\r\n+        listeners.putIfAbsent(invocation, listener);\r\n+    }\r\n+\r\n+    public void removeListener(Invocation invocation) {\r\n+        listeners.remove(invocation);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/ProtocolServer.java", "source2": "org/apache/dubbo/rpc/ProtocolServer.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,47 +1,47 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.remoting.RemotingServer;\n-\n-/**\n- * Distinct from {@link RemotingServer}, each protocol holds one or more ProtocolServers(the number usually decides by port numbers),\n- * while each ProtocolServer holds zero or one RemotingServer.\n- */\n-public interface ProtocolServer {\n-\n-    default RemotingServer getRemotingServer() {\n-        return null;\n-    }\n-\n-    default void setRemotingServers(RemotingServer server) {\n-    }\n-\n-    String getAddress();\n-\n-    void setAddress(String address);\n-\n-    default URL getUrl() {\n-        return null;\n-    }\n-\n-    default void reset(URL url) {\n-    }\n-\n-    void close();\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.remoting.RemotingServer;\r\n+\r\n+/**\r\n+ * Distinct from {@link RemotingServer}, each protocol holds one or more ProtocolServers(the number usually decides by port numbers),\r\n+ * while each ProtocolServer holds zero or one RemotingServer.\r\n+ */\r\n+public interface ProtocolServer {\r\n+\r\n+    default RemotingServer getRemotingServer() {\r\n+        return null;\r\n+    }\r\n+\r\n+    default void setRemotingServers(RemotingServer server) {\r\n+    }\r\n+\r\n+    String getAddress();\r\n+\r\n+    void setAddress(String address);\r\n+\r\n+    default URL getUrl() {\r\n+        return null;\r\n+    }\r\n+\r\n+    default void reset(URL url) {\r\n+    }\r\n+\r\n+    void close();\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/ProxyFactory.java", "source2": "org/apache/dubbo/rpc/ProxyFactory.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,61 +1,61 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.Adaptive;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-import static org.apache.dubbo.rpc.Constants.PROXY_KEY;\n-\n-/**\n- * ProxyFactory. (API/SPI, Singleton, ThreadSafe)\n- */\n-@SPI(\"javassist\")\n-public interface ProxyFactory {\n-\n-    /**\n-     * create proxy.\n-     *\n-     * @param invoker\n-     * @return proxy\n-     */\n-    @Adaptive({PROXY_KEY})\n-    <T> T getProxy(Invoker<T> invoker) throws RpcException;\n-\n-    /**\n-     * create proxy.\n-     *\n-     * @param invoker\n-     * @return proxy\n-     */\n-    @Adaptive({PROXY_KEY})\n-    <T> T getProxy(Invoker<T> invoker, boolean generic) throws RpcException;\n-\n-    /**\n-     * create invoker.\n-     *\n-     * @param <T>\n-     * @param proxy\n-     * @param type\n-     * @param url\n-     * @return invoker\n-     */\n-    @Adaptive({PROXY_KEY})\n-    <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) throws RpcException;\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.Adaptive;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+import static org.apache.dubbo.rpc.Constants.PROXY_KEY;\r\n+\r\n+/**\r\n+ * ProxyFactory. (API/SPI, Singleton, ThreadSafe)\r\n+ */\r\n+@SPI(\"javassist\")\r\n+public interface ProxyFactory {\r\n+\r\n+    /**\r\n+     * create proxy.\r\n+     *\r\n+     * @param invoker\r\n+     * @return proxy\r\n+     */\r\n+    @Adaptive({PROXY_KEY})\r\n+    <T> T getProxy(Invoker<T> invoker) throws RpcException;\r\n+\r\n+    /**\r\n+     * create proxy.\r\n+     *\r\n+     * @param invoker\r\n+     * @return proxy\r\n+     */\r\n+    @Adaptive({PROXY_KEY})\r\n+    <T> T getProxy(Invoker<T> invoker, boolean generic) throws RpcException;\r\n+\r\n+    /**\r\n+     * create invoker.\r\n+     *\r\n+     * @param <T>\r\n+     * @param proxy\r\n+     * @param type\r\n+     * @param url\r\n+     * @return invoker\r\n+     */\r\n+    @Adaptive({PROXY_KEY})\r\n+    <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) throws RpcException;\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/Result.java", "source2": "org/apache/dubbo/rpc/Result.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,189 +1,189 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc;\n-\n-import org.apache.dubbo.common.Experimental;\n-\n-import java.io.Serializable;\n-import java.util.Map;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.CompletionStage;\n-import java.util.concurrent.ExecutionException;\n-import java.util.concurrent.Future;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.TimeoutException;\n-import java.util.function.BiConsumer;\n-import java.util.function.Function;\n-\n-\n-/**\n- * (API, Prototype, NonThreadSafe)\n- *\n- * An RPC {@link Result}.\n- *\n- * Known implementations are:\n- * 1. {@link AsyncRpcResult}, it's a {@link CompletionStage} whose underlying value signifies the return value of an RPC call.\n- * 2. {@link AppResponse}, it inevitably inherits {@link CompletionStage} and {@link Future}, but you should never treat AppResponse as a type of Future,\n- *    instead, it is a normal concrete type.\n- *\n- * @serial Don't change the class name and package name.\n- * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\n- * @see AppResponse\n- */\n-public interface Result extends Serializable {\n-\n-    /**\n-     * Get invoke result.\n-     *\n-     * @return result. if no result return null.\n-     */\n-    Object getValue();\n-\n-    void setValue(Object value);\n-\n-    /**\n-     * Get exception.\n-     *\n-     * @return exception. if no exception return null.\n-     */\n-    Throwable getException();\n-\n-    void setException(Throwable t);\n-\n-    /**\n-     * Has exception.\n-     *\n-     * @return has exception.\n-     */\n-    boolean hasException();\n-\n-    /**\n-     * Recreate.\n-     * <p>\n-     * <code>\n-     * if (hasException()) {\n-     * throw getException();\n-     * } else {\n-     * return getValue();\n-     * }\n-     * </code>\n-     *\n-     * @return result.\n-     * @throws if has exception throw it.\n-     */\n-    Object recreate() throws Throwable;\n-\n-    /**\n-     * get attachments.\n-     *\n-     * @return attachments.\n-     */\n-    Map<String, String> getAttachments();\n-\n-    /**\n-     * get attachments.\n-     *\n-     * @return attachments.\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Map<String, Object> getObjectAttachments();\n-\n-    /**\n-     * Add the specified map to existing attachments in this instance.\n-     *\n-     * @param map\n-     */\n-    void addAttachments(Map<String, String> map);\n-\n-    /**\n-     * Add the specified map to existing attachments in this instance.\n-     *\n-     * @param map\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void addObjectAttachments(Map<String, Object> map);\n-\n-    /**\n-     * Replace the existing attachments with the specified param.\n-     *\n-     * @param map\n-     */\n-    void setAttachments(Map<String, String> map);\n-\n-    /**\n-     * Replace the existing attachments with the specified param.\n-     *\n-     * @param map\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setObjectAttachments(Map<String, Object> map);\n-\n-    /**\n-     * get attachment by key.\n-     *\n-     * @return attachment value.\n-     */\n-    String getAttachment(String key);\n-\n-    /**\n-     * get attachment by key.\n-     *\n-     * @return attachment value.\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Object getObjectAttachment(String key);\n-\n-    /**\n-     * get attachment by key with default value.\n-     *\n-     * @return attachment value.\n-     */\n-    String getAttachment(String key, String defaultValue);\n-\n-    /**\n-     * get attachment by key with default value.\n-     *\n-     * @return attachment value.\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    Object getObjectAttachment(String key, Object defaultValue);\n-\n-    void setAttachment(String key, String value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setAttachment(String key, Object value);\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    void setObjectAttachment(String key, Object value);\n-\n-    /**\n-     * Add a callback which can be triggered when the RPC call finishes.\n-     * <p>\n-     * Just as the method name implies, this method will guarantee the callback being triggered under the same context as when the call was started,\n-     * see implementation in {@link Result#whenCompleteWithContext(BiConsumer)}\n-     *\n-     * @param fn\n-     * @return\n-     */\n-    Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn);\n-\n-    <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn);\n-\n-    Result get() throws InterruptedException, ExecutionException;\n-\n-    Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;\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;\r\n+\r\n+import org.apache.dubbo.common.Experimental;\r\n+\r\n+import java.io.Serializable;\r\n+import java.util.Map;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.CompletionStage;\r\n+import java.util.concurrent.ExecutionException;\r\n+import java.util.concurrent.Future;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.TimeoutException;\r\n+import java.util.function.BiConsumer;\r\n+import java.util.function.Function;\r\n+\r\n+\r\n+/**\r\n+ * (API, Prototype, NonThreadSafe)\r\n+ *\r\n+ * An RPC {@link Result}.\r\n+ *\r\n+ * Known implementations are:\r\n+ * 1. {@link AsyncRpcResult}, it's a {@link CompletionStage} whose underlying value signifies the return value of an RPC call.\r\n+ * 2. {@link AppResponse}, it inevitably inherits {@link CompletionStage} and {@link Future}, but you should never treat AppResponse as a type of Future,\r\n+ *    instead, it is a normal concrete type.\r\n+ *\r\n+ * @serial Don't change the class name and package name.\r\n+ * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\r\n+ * @see AppResponse\r\n+ */\r\n+public interface Result extends Serializable {\r\n+\r\n+    /**\r\n+     * Get invoke result.\r\n+     *\r\n+     * @return result. if no result return null.\r\n+     */\r\n+    Object getValue();\r\n+\r\n+    void setValue(Object value);\r\n+\r\n+    /**\r\n+     * Get exception.\r\n+     *\r\n+     * @return exception. if no exception return null.\r\n+     */\r\n+    Throwable getException();\r\n+\r\n+    void setException(Throwable t);\r\n+\r\n+    /**\r\n+     * Has exception.\r\n+     *\r\n+     * @return has exception.\r\n+     */\r\n+    boolean hasException();\r\n+\r\n+    /**\r\n+     * Recreate.\r\n+     * <p>\r\n+     * <code>\r\n+     * if (hasException()) {\r\n+     * throw getException();\r\n+     * } else {\r\n+     * return getValue();\r\n+     * }\r\n+     * </code>\r\n+     *\r\n+     * @return result.\r\n+     * @throws if has exception throw it.\r\n+     */\r\n+    Object recreate() throws Throwable;\r\n+\r\n+    /**\r\n+     * get attachments.\r\n+     *\r\n+     * @return attachments.\r\n+     */\r\n+    Map<String, String> getAttachments();\r\n+\r\n+    /**\r\n+     * get attachments.\r\n+     *\r\n+     * @return attachments.\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Map<String, Object> getObjectAttachments();\r\n+\r\n+    /**\r\n+     * Add the specified map to existing attachments in this instance.\r\n+     *\r\n+     * @param map\r\n+     */\r\n+    void addAttachments(Map<String, String> map);\r\n+\r\n+    /**\r\n+     * Add the specified map to existing attachments in this instance.\r\n+     *\r\n+     * @param map\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void addObjectAttachments(Map<String, Object> map);\r\n+\r\n+    /**\r\n+     * Replace the existing attachments with the specified param.\r\n+     *\r\n+     * @param map\r\n+     */\r\n+    void setAttachments(Map<String, String> map);\r\n+\r\n+    /**\r\n+     * Replace the existing attachments with the specified param.\r\n+     *\r\n+     * @param map\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setObjectAttachments(Map<String, Object> map);\r\n+\r\n+    /**\r\n+     * get attachment by key.\r\n+     *\r\n+     * @return attachment value.\r\n+     */\r\n+    String getAttachment(String key);\r\n+\r\n+    /**\r\n+     * get attachment by key.\r\n+     *\r\n+     * @return attachment value.\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Object getObjectAttachment(String key);\r\n+\r\n+    /**\r\n+     * get attachment by key with default value.\r\n+     *\r\n+     * @return attachment value.\r\n+     */\r\n+    String getAttachment(String key, String defaultValue);\r\n+\r\n+    /**\r\n+     * get attachment by key with default value.\r\n+     *\r\n+     * @return attachment value.\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    Object getObjectAttachment(String key, Object defaultValue);\r\n+\r\n+    void setAttachment(String key, String value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setAttachment(String key, Object value);\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    void setObjectAttachment(String key, Object value);\r\n+\r\n+    /**\r\n+     * Add a callback which can be triggered when the RPC call finishes.\r\n+     * <p>\r\n+     * Just as the method name implies, this method will guarantee the callback being triggered under the same context as when the call was started,\r\n+     * see implementation in {@link Result#whenCompleteWithContext(BiConsumer)}\r\n+     *\r\n+     * @param fn\r\n+     * @return\r\n+     */\r\n+    Result whenCompleteWithContext(BiConsumer<Result, Throwable> fn);\r\n+\r\n+    <U> CompletableFuture<U> thenApply(Function<Result, ? extends U> fn);\r\n+\r\n+    Result get() throws InterruptedException, ExecutionException;\r\n+\r\n+    Result get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/RpcContext.java", "source2": "org/apache/dubbo/rpc/RpcContext.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,859 +1,859 @@\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;\n-\n-import org.apache.dubbo.common.Experimental;\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.threadlocal.InternalThreadLocal;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.NetUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import java.net.InetSocketAddress;\n-import java.util.ArrayList;\n-import java.util.Arrays;\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.concurrent.Callable;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.Future;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;\n-import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\n-import static org.apache.dubbo.rpc.Constants.RETURN_KEY;\n-\n-\n-/**\n- * Thread local context. (API, ThreadLocal, ThreadSafe)\n- * <p>\n- * Note: RpcContext is a temporary state holder. States in RpcContext changes every time when request is sent or received.\n- * For example: A invokes B, then B invokes C. On service B, RpcContext saves invocation info from A to B before B\n- * starts invoking C, and saves invocation info from B to C after B invokes C.\n- *\n- * @export\n- * @see org.apache.dubbo.rpc.filter.ContextFilter\n- */\n-public class RpcContext {\n-\n-    /**\n-     * use internal thread local to improve performance\n-     */\n-    // FIXME REQUEST_CONTEXT\n-    private static final InternalThreadLocal<RpcContext> LOCAL = new InternalThreadLocal<RpcContext>() {\n-        @Override\n-        protected RpcContext initialValue() {\n-            return new RpcContext();\n-        }\n-    };\n-\n-    // FIXME RESPONSE_CONTEXT\n-    private static final InternalThreadLocal<RpcContext> SERVER_LOCAL = new InternalThreadLocal<RpcContext>() {\n-        @Override\n-        protected RpcContext initialValue() {\n-            return new RpcContext();\n-        }\n-    };\n-\n-    protected final Map<String, Object> attachments = new HashMap<>();\n-    private final Map<String, Object> values = new HashMap<String, Object>();\n-\n-    private List<URL> urls;\n-\n-    private URL url;\n-\n-    private String methodName;\n-\n-    private Class<?>[] parameterTypes;\n-\n-    private Object[] arguments;\n-\n-    private InetSocketAddress localAddress;\n-\n-    private InetSocketAddress remoteAddress;\n-\n-    private String remoteApplicationName;\n-\n-    @Deprecated\n-    private List<Invoker<?>> invokers;\n-    @Deprecated\n-    private Invoker<?> invoker;\n-    @Deprecated\n-    private Invocation invocation;\n-\n-    // now we don't use the 'values' map to hold these objects\n-    // we want these objects to be as generic as possible\n-    private Object request;\n-    private Object response;\n-    private AsyncContext asyncContext;\n-\n-    private boolean remove = true;\n-\n-\n-    protected RpcContext() {\n-    }\n-\n-    /**\n-     * get server side context.\n-     *\n-     * @return server context\n-     */\n-    public static RpcContext getServerContext() {\n-        return SERVER_LOCAL.get();\n-    }\n-\n-    public static void restoreServerContext(RpcContext oldServerContext) {\n-        SERVER_LOCAL.set(oldServerContext);\n-    }\n-\n-    /**\n-     * remove server side context.\n-     *\n-     * @see org.apache.dubbo.rpc.filter.ContextFilter\n-     */\n-    public static void removeServerContext() {\n-        SERVER_LOCAL.remove();\n-    }\n-\n-    /**\n-     * get context.\n-     *\n-     * @return context\n-     */\n-    public static RpcContext getContext() {\n-        return LOCAL.get();\n-    }\n-\n-    public boolean canRemove() {\n-        return remove;\n-    }\n-\n-    public void clearAfterEachInvoke(boolean remove) {\n-        this.remove = remove;\n-    }\n-\n-    public static void restoreContext(RpcContext oldContext) {\n-        LOCAL.set(oldContext);\n-    }\n-\n-    /**\n-     * remove context.\n-     *\n-     * @see org.apache.dubbo.rpc.filter.ContextFilter\n-     */\n-    public static void removeContext() {\n-        removeContext(false);\n-    }\n-\n-    /**\n-     * customized for internal use.\n-     *\n-     * @param checkCanRemove if need check before remove\n-     */\n-    public static void removeContext(boolean checkCanRemove) {\n-        if (LOCAL.get().canRemove()) {\n-            LOCAL.remove();\n-        }\n-    }\n-\n-    /**\n-     * Get the request object of the underlying RPC protocol, e.g. HttpServletRequest\n-     *\n-     * @return null if the underlying protocol doesn't provide support for getting request\n-     */\n-    public Object getRequest() {\n-        return request;\n-    }\n-\n-    public void setRequest(Object request) {\n-        this.request = request;\n-    }\n-\n-    /**\n-     * Get the request object of the underlying RPC protocol, e.g. HttpServletRequest\n-     *\n-     * @return null if the underlying protocol doesn't provide support for getting request or the request is not of the specified type\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> T getRequest(Class<T> clazz) {\n-        return (request != null && clazz.isAssignableFrom(request.getClass())) ? (T) request : null;\n-    }\n-\n-    /**\n-     * Get the response object of the underlying RPC protocol, e.g. HttpServletResponse\n-     *\n-     * @return null if the underlying protocol doesn't provide support for getting response\n-     */\n-    public Object getResponse() {\n-        return response;\n-    }\n-\n-    public void setResponse(Object response) {\n-        this.response = response;\n-    }\n-\n-    /**\n-     * Get the response object of the underlying RPC protocol, e.g. HttpServletResponse\n-     *\n-     * @return null if the underlying protocol doesn't provide support for getting response or the response is not of the specified type\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> T getResponse(Class<T> clazz) {\n-        return (response != null && clazz.isAssignableFrom(response.getClass())) ? (T) response : null;\n-    }\n-\n-    /**\n-     * is provider side.\n-     *\n-     * @return provider side.\n-     */\n-    public boolean isProviderSide() {\n-        return !isConsumerSide();\n-    }\n-\n-    /**\n-     * is consumer side.\n-     *\n-     * @return consumer side.\n-     */\n-    public boolean isConsumerSide() {\n-        return getUrl().getParameter(SIDE_KEY, PROVIDER_SIDE).equals(CONSUMER_SIDE);\n-    }\n-\n-    /**\n-     * get CompletableFuture.\n-     *\n-     * @param <T>\n-     * @return future\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> CompletableFuture<T> getCompletableFuture() {\n-        return FutureContext.getContext().getCompletableFuture();\n-    }\n-\n-    /**\n-     * get future.\n-     *\n-     * @param <T>\n-     * @return future\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> Future<T> getFuture() {\n-        return FutureContext.getContext().getCompletableFuture();\n-    }\n-\n-    /**\n-     * set future.\n-     *\n-     * @param future\n-     */\n-    public void setFuture(CompletableFuture<?> future) {\n-        FutureContext.getContext().setFuture(future);\n-    }\n-\n-    public List<URL> getUrls() {\n-        return urls == null && url != null ? (List<URL>) Arrays.asList(url) : urls;\n-    }\n-\n-    public void setUrls(List<URL> urls) {\n-        this.urls = urls;\n-    }\n-\n-    public URL getUrl() {\n-        return url;\n-    }\n-\n-    public void setUrl(URL url) {\n-        this.url = url;\n-    }\n-\n-    /**\n-     * get method name.\n-     *\n-     * @return method name.\n-     */\n-    public String getMethodName() {\n-        return methodName;\n-    }\n-\n-    public void setMethodName(String methodName) {\n-        this.methodName = methodName;\n-    }\n-\n-    /**\n-     * get parameter types.\n-     *\n-     * @serial\n-     */\n-    public Class<?>[] getParameterTypes() {\n-        return parameterTypes;\n-    }\n-\n-    public void setParameterTypes(Class<?>[] parameterTypes) {\n-        this.parameterTypes = parameterTypes;\n-    }\n-\n-    /**\n-     * get arguments.\n-     *\n-     * @return arguments.\n-     */\n-    public Object[] getArguments() {\n-        return arguments;\n-    }\n-\n-    public void setArguments(Object[] arguments) {\n-        this.arguments = arguments;\n-    }\n-\n-    /**\n-     * set local address.\n-     *\n-     * @param host\n-     * @param port\n-     * @return context\n-     */\n-    public RpcContext setLocalAddress(String host, int port) {\n-        if (port < 0) {\n-            port = 0;\n-        }\n-        this.localAddress = InetSocketAddress.createUnresolved(host, port);\n-        return this;\n-    }\n-\n-    /**\n-     * get local address.\n-     *\n-     * @return local address\n-     */\n-    public InetSocketAddress getLocalAddress() {\n-        return localAddress;\n-    }\n-\n-    /**\n-     * set local address.\n-     *\n-     * @param address\n-     * @return context\n-     */\n-    public RpcContext setLocalAddress(InetSocketAddress address) {\n-        this.localAddress = address;\n-        return this;\n-    }\n-\n-    public String getLocalAddressString() {\n-        return getLocalHost() + \":\" + getLocalPort();\n-    }\n-\n-    /**\n-     * get local host name.\n-     *\n-     * @return local host name\n-     */\n-    public String getLocalHostName() {\n-        String host = localAddress == null ? null : localAddress.getHostName();\n-        if (StringUtils.isEmpty(host)) {\n-            return getLocalHost();\n-        }\n-        return host;\n-    }\n-\n-    /**\n-     * set remote address.\n-     *\n-     * @param host\n-     * @param port\n-     * @return context\n-     */\n-    public RpcContext setRemoteAddress(String host, int port) {\n-        if (port < 0) {\n-            port = 0;\n-        }\n-        this.remoteAddress = InetSocketAddress.createUnresolved(host, port);\n-        return this;\n-    }\n-\n-    /**\n-     * get remote address.\n-     *\n-     * @return remote address\n-     */\n-    public InetSocketAddress getRemoteAddress() {\n-        return remoteAddress;\n-    }\n-\n-    /**\n-     * set remote address.\n-     *\n-     * @param address\n-     * @return context\n-     */\n-    public RpcContext setRemoteAddress(InetSocketAddress address) {\n-        this.remoteAddress = address;\n-        return this;\n-    }\n-\n-    public String getRemoteApplicationName() {\n-        return remoteApplicationName;\n-    }\n-\n-    public RpcContext setRemoteApplicationName(String remoteApplicationName) {\n-        this.remoteApplicationName = remoteApplicationName;\n-        return this;\n-    }\n-\n-    /**\n-     * get remote address string.\n-     *\n-     * @return remote address string.\n-     */\n-    public String getRemoteAddressString() {\n-        return getRemoteHost() + \":\" + getRemotePort();\n-    }\n-\n-    /**\n-     * get remote host name.\n-     *\n-     * @return remote host name\n-     */\n-    public String getRemoteHostName() {\n-        return remoteAddress == null ? null : remoteAddress.getHostName();\n-    }\n-\n-    /**\n-     * get local host.\n-     *\n-     * @return local host\n-     */\n-    public String getLocalHost() {\n-        String host = localAddress == null ? null :\n-                localAddress.getAddress() == null ? localAddress.getHostName()\n-                        : NetUtils.filterLocalHost(localAddress.getAddress().getHostAddress());\n-        if (host == null || host.length() == 0) {\n-            return NetUtils.getLocalHost();\n-        }\n-        return host;\n-    }\n-\n-    /**\n-     * get local port.\n-     *\n-     * @return port\n-     */\n-    public int getLocalPort() {\n-        return localAddress == null ? 0 : localAddress.getPort();\n-    }\n-\n-    /**\n-     * get remote host.\n-     *\n-     * @return remote host\n-     */\n-    public String getRemoteHost() {\n-        return remoteAddress == null ? null :\n-                remoteAddress.getAddress() == null ? remoteAddress.getHostName()\n-                        : NetUtils.filterLocalHost(remoteAddress.getAddress().getHostAddress());\n-    }\n-\n-    /**\n-     * get remote port.\n-     *\n-     * @return remote port\n-     */\n-    public int getRemotePort() {\n-        return remoteAddress == null ? 0 : remoteAddress.getPort();\n-    }\n-\n-    /**\n-     * also see {@link #getObjectAttachment(String)}.\n-     *\n-     * @param key\n-     * @return attachment\n-     */\n-    public String getAttachment(String key) {\n-        Object value = attachments.get(key);\n-        if (value instanceof String) {\n-            return (String) value;\n-        }\n-        return null; // or JSON.toString(value);\n-    }\n-\n-    /**\n-     * get attachment.\n-     *\n-     * @param key\n-     * @return attachment\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    public Object getObjectAttachment(String key) {\n-        return attachments.get(key);\n-    }\n-\n-    /**\n-     * set attachment.\n-     *\n-     * @param key\n-     * @param value\n-     * @return context\n-     */\n-    public RpcContext setAttachment(String key, String value) {\n-        return setObjectAttachment(key, (Object) value);\n-    }\n-\n-    public RpcContext setAttachment(String key, Object value) {\n-        return setObjectAttachment(key, value);\n-    }\n-\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    public RpcContext setObjectAttachment(String key, Object value) {\n-        if (value == null) {\n-            attachments.remove(key);\n-        } else {\n-            attachments.put(key, value);\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * remove attachment.\n-     *\n-     * @param key\n-     * @return context\n-     */\n-    public RpcContext removeAttachment(String key) {\n-        attachments.remove(key);\n-        return this;\n-    }\n-\n-    /**\n-     * get attachments.\n-     *\n-     * @return attachments\n-     */\n-    @Deprecated\n-    public Map<String, String> getAttachments() {\n-        return new AttachmentsAdapter.ObjectToStringMap(this.getObjectAttachments());\n-    }\n-\n-    /**\n-     * get attachments.\n-     *\n-     * @return attachments\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    public Map<String, Object> getObjectAttachments() {\n-        return attachments;\n-    }\n-\n-    /**\n-     * set attachments\n-     *\n-     * @param attachment\n-     * @return context\n-     */\n-    public RpcContext setAttachments(Map<String, String> attachment) {\n-        this.attachments.clear();\n-        if (attachment != null && attachment.size() > 0) {\n-            this.attachments.putAll(attachment);\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * set attachments\n-     *\n-     * @param attachment\n-     * @return context\n-     */\n-    @Experimental(\"Experiment api for supporting Object transmission\")\n-    public RpcContext setObjectAttachments(Map<String, Object> attachment) {\n-        this.attachments.clear();\n-        if (attachment != null && attachment.size() > 0) {\n-            this.attachments.putAll(attachment);\n-        }\n-        return this;\n-    }\n-\n-    public void clearAttachments() {\n-        this.attachments.clear();\n-    }\n-\n-    /**\n-     * get values.\n-     *\n-     * @return values\n-     */\n-    public Map<String, Object> get() {\n-        return values;\n-    }\n-\n-    /**\n-     * set value.\n-     *\n-     * @param key\n-     * @param value\n-     * @return context\n-     */\n-    public RpcContext set(String key, Object value) {\n-        if (value == null) {\n-            values.remove(key);\n-        } else {\n-            values.put(key, value);\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * remove value.\n-     *\n-     * @param key\n-     * @return value\n-     */\n-    public RpcContext remove(String key) {\n-        values.remove(key);\n-        return this;\n-    }\n-\n-    /**\n-     * get value.\n-     *\n-     * @param key\n-     * @return value\n-     */\n-    public Object get(String key) {\n-        return values.get(key);\n-    }\n-\n-    /**\n-     * @deprecated Replace to isProviderSide()\n-     */\n-    @Deprecated\n-    public boolean isServerSide() {\n-        return isProviderSide();\n-    }\n-\n-    /**\n-     * @deprecated Replace to isConsumerSide()\n-     */\n-    @Deprecated\n-    public boolean isClientSide() {\n-        return isConsumerSide();\n-    }\n-\n-    /**\n-     * @deprecated Replace to getUrls()\n-     */\n-    @Deprecated\n-    @SuppressWarnings({\"unchecked\", \"rawtypes\"})\n-    public List<Invoker<?>> getInvokers() {\n-        return invokers == null && invoker != null ? (List) Arrays.asList(invoker) : invokers;\n-    }\n-\n-    public RpcContext setInvokers(List<Invoker<?>> invokers) {\n-        this.invokers = invokers;\n-        if (CollectionUtils.isNotEmpty(invokers)) {\n-            List<URL> urls = new ArrayList<URL>(invokers.size());\n-            for (Invoker<?> invoker : invokers) {\n-                urls.add(invoker.getUrl());\n-            }\n-            setUrls(urls);\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * @deprecated Replace to getUrl()\n-     */\n-    @Deprecated\n-    public Invoker<?> getInvoker() {\n-        return invoker;\n-    }\n-\n-    public RpcContext setInvoker(Invoker<?> invoker) {\n-        this.invoker = invoker;\n-        if (invoker != null) {\n-            setUrl(invoker.getUrl());\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * @deprecated Replace to getMethodName(), getParameterTypes(), getArguments()\n-     */\n-    @Deprecated\n-    public Invocation getInvocation() {\n-        return invocation;\n-    }\n-\n-    public RpcContext setInvocation(Invocation invocation) {\n-        this.invocation = invocation;\n-        if (invocation != null) {\n-            setMethodName(invocation.getMethodName());\n-            setParameterTypes(invocation.getParameterTypes());\n-            setArguments(invocation.getArguments());\n-        }\n-        return this;\n-    }\n-\n-    /**\n-     * Async invocation. Timeout will be handled even if <code>Future.get()</code> is not called.\n-     *\n-     * @param callable\n-     * @return get the return result from <code>future.get()</code>\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> CompletableFuture<T> asyncCall(Callable<T> callable) {\n-        try {\n-            try {\n-                setAttachment(ASYNC_KEY, Boolean.TRUE.toString());\n-                final T o = callable.call();\n-                //local invoke will return directly\n-                if (o != null) {\n-                    if (o instanceof CompletableFuture) {\n-                        return (CompletableFuture<T>) o;\n-                    }\n-                    return CompletableFuture.completedFuture(o);\n-                } else {\n-                    // The service has a normal sync method signature, should get future from RpcContext.\n-                }\n-            } catch (Exception e) {\n-                throw new RpcException(e);\n-            } finally {\n-                removeAttachment(ASYNC_KEY);\n-            }\n-        } catch (final RpcException e) {\n-            CompletableFuture<T> exceptionFuture = new CompletableFuture<>();\n-            exceptionFuture.completeExceptionally(e);\n-            return exceptionFuture;\n-        }\n-        return ((CompletableFuture<T>) getContext().getFuture());\n-    }\n-\n-    /**\n-     * one way async call, send request only, and result is not required\n-     *\n-     * @param runnable\n-     */\n-    public void asyncCall(Runnable runnable) {\n-        try {\n-            setAttachment(RETURN_KEY, Boolean.FALSE.toString());\n-            runnable.run();\n-        } catch (Throwable e) {\n-            // FIXME should put exception in future?\n-            throw new RpcException(\"oneway call error .\" + e.getMessage(), e);\n-        } finally {\n-            removeAttachment(RETURN_KEY);\n-        }\n-    }\n-\n-    /**\n-     * @return\n-     * @throws IllegalStateException\n-     */\n-    @SuppressWarnings(\"unchecked\")\n-    public static AsyncContext startAsync() throws IllegalStateException {\n-        RpcContext currentContext = getContext();\n-        if (currentContext.asyncContext == null) {\n-            currentContext.asyncContext = new AsyncContextImpl();\n-        }\n-        currentContext.asyncContext.start();\n-        return currentContext.asyncContext;\n-    }\n-\n-    protected void setAsyncContext(AsyncContext asyncContext) {\n-        this.asyncContext = asyncContext;\n-    }\n-\n-    public boolean isAsyncStarted() {\n-        if (this.asyncContext == null) {\n-            return false;\n-        }\n-        return asyncContext.isAsyncStarted();\n-    }\n-\n-    public boolean stopAsync() {\n-        return asyncContext.stop();\n-    }\n-\n-    public AsyncContext getAsyncContext() {\n-        return asyncContext;\n-    }\n-\n-    // RPC service context updated before each service call.\n-    private URL consumerUrl;\n-\n-    public String getGroup() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getParameter(GROUP_KEY);\n-    }\n-\n-    public String getVersion() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getParameter(VERSION_KEY);\n-    }\n-\n-    public String getInterfaceName() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getServiceInterface();\n-    }\n-\n-    public String getProtocol() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getParameter(PROTOCOL_KEY, DUBBO);\n-    }\n-\n-    public String getServiceKey() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getServiceKey();\n-    }\n-\n-    public String getProtocolServiceKey() {\n-        if (consumerUrl == null) {\n-            return null;\n-        }\n-        return consumerUrl.getProtocolServiceKey();\n-    }\n-\n-    public URL getConsumerUrl() {\n-        return consumerUrl;\n-    }\n-\n-    public void setConsumerUrl(URL consumerUrl) {\n-        this.consumerUrl = consumerUrl;\n-    }\n-\n-    public static void setRpcContext(URL url) {\n-        RpcContext rpcContext = RpcContext.getContext();\n-        rpcContext.setConsumerUrl(url);\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;\r\n+\r\n+import org.apache.dubbo.common.Experimental;\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.threadlocal.InternalThreadLocal;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.NetUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import java.net.InetSocketAddress;\r\n+import java.util.ArrayList;\r\n+import java.util.Arrays;\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.concurrent.Callable;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.Future;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.RETURN_KEY;\r\n+\r\n+\r\n+/**\r\n+ * Thread local context. (API, ThreadLocal, ThreadSafe)\r\n+ * <p>\r\n+ * Note: RpcContext is a temporary state holder. States in RpcContext changes every time when request is sent or received.\r\n+ * For example: A invokes B, then B invokes C. On service B, RpcContext saves invocation info from A to B before B\r\n+ * starts invoking C, and saves invocation info from B to C after B invokes C.\r\n+ *\r\n+ * @export\r\n+ * @see org.apache.dubbo.rpc.filter.ContextFilter\r\n+ */\r\n+public class RpcContext {\r\n+\r\n+    /**\r\n+     * use internal thread local to improve performance\r\n+     */\r\n+    // FIXME REQUEST_CONTEXT\r\n+    private static final InternalThreadLocal<RpcContext> LOCAL = new InternalThreadLocal<RpcContext>() {\r\n+        @Override\r\n+        protected RpcContext initialValue() {\r\n+            return new RpcContext();\r\n+        }\r\n+    };\r\n+\r\n+    // FIXME RESPONSE_CONTEXT\r\n+    private static final InternalThreadLocal<RpcContext> SERVER_LOCAL = new InternalThreadLocal<RpcContext>() {\r\n+        @Override\r\n+        protected RpcContext initialValue() {\r\n+            return new RpcContext();\r\n+        }\r\n+    };\r\n+\r\n+    protected final Map<String, Object> attachments = new HashMap<>();\r\n+    private final Map<String, Object> values = new HashMap<String, Object>();\r\n+\r\n+    private List<URL> urls;\r\n+\r\n+    private URL url;\r\n+\r\n+    private String methodName;\r\n+\r\n+    private Class<?>[] parameterTypes;\r\n+\r\n+    private Object[] arguments;\r\n+\r\n+    private InetSocketAddress localAddress;\r\n+\r\n+    private InetSocketAddress remoteAddress;\r\n+\r\n+    private String remoteApplicationName;\r\n+\r\n+    @Deprecated\r\n+    private List<Invoker<?>> invokers;\r\n+    @Deprecated\r\n+    private Invoker<?> invoker;\r\n+    @Deprecated\r\n+    private Invocation invocation;\r\n+\r\n+    // now we don't use the 'values' map to hold these objects\r\n+    // we want these objects to be as generic as possible\r\n+    private Object request;\r\n+    private Object response;\r\n+    private AsyncContext asyncContext;\r\n+\r\n+    private boolean remove = true;\r\n+\r\n+\r\n+    protected RpcContext() {\r\n+    }\r\n+\r\n+    /**\r\n+     * get server side context.\r\n+     *\r\n+     * @return server context\r\n+     */\r\n+    public static RpcContext getServerContext() {\r\n+        return SERVER_LOCAL.get();\r\n+    }\r\n+\r\n+    public static void restoreServerContext(RpcContext oldServerContext) {\r\n+        SERVER_LOCAL.set(oldServerContext);\r\n+    }\r\n+\r\n+    /**\r\n+     * remove server side context.\r\n+     *\r\n+     * @see org.apache.dubbo.rpc.filter.ContextFilter\r\n+     */\r\n+    public static void removeServerContext() {\r\n+        SERVER_LOCAL.remove();\r\n+    }\r\n+\r\n+    /**\r\n+     * get context.\r\n+     *\r\n+     * @return context\r\n+     */\r\n+    public static RpcContext getContext() {\r\n+        return LOCAL.get();\r\n+    }\r\n+\r\n+    public boolean canRemove() {\r\n+        return remove;\r\n+    }\r\n+\r\n+    public void clearAfterEachInvoke(boolean remove) {\r\n+        this.remove = remove;\r\n+    }\r\n+\r\n+    public static void restoreContext(RpcContext oldContext) {\r\n+        LOCAL.set(oldContext);\r\n+    }\r\n+\r\n+    /**\r\n+     * remove context.\r\n+     *\r\n+     * @see org.apache.dubbo.rpc.filter.ContextFilter\r\n+     */\r\n+    public static void removeContext() {\r\n+        removeContext(false);\r\n+    }\r\n+\r\n+    /**\r\n+     * customized for internal use.\r\n+     *\r\n+     * @param checkCanRemove if need check before remove\r\n+     */\r\n+    public static void removeContext(boolean checkCanRemove) {\r\n+        if (LOCAL.get().canRemove()) {\r\n+            LOCAL.remove();\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the request object of the underlying RPC protocol, e.g. HttpServletRequest\r\n+     *\r\n+     * @return null if the underlying protocol doesn't provide support for getting request\r\n+     */\r\n+    public Object getRequest() {\r\n+        return request;\r\n+    }\r\n+\r\n+    public void setRequest(Object request) {\r\n+        this.request = request;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the request object of the underlying RPC protocol, e.g. HttpServletRequest\r\n+     *\r\n+     * @return null if the underlying protocol doesn't provide support for getting request or the request is not of the specified type\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> T getRequest(Class<T> clazz) {\r\n+        return (request != null && clazz.isAssignableFrom(request.getClass())) ? (T) request : null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the response object of the underlying RPC protocol, e.g. HttpServletResponse\r\n+     *\r\n+     * @return null if the underlying protocol doesn't provide support for getting response\r\n+     */\r\n+    public Object getResponse() {\r\n+        return response;\r\n+    }\r\n+\r\n+    public void setResponse(Object response) {\r\n+        this.response = response;\r\n+    }\r\n+\r\n+    /**\r\n+     * Get the response object of the underlying RPC protocol, e.g. HttpServletResponse\r\n+     *\r\n+     * @return null if the underlying protocol doesn't provide support for getting response or the response is not of the specified type\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> T getResponse(Class<T> clazz) {\r\n+        return (response != null && clazz.isAssignableFrom(response.getClass())) ? (T) response : null;\r\n+    }\r\n+\r\n+    /**\r\n+     * is provider side.\r\n+     *\r\n+     * @return provider side.\r\n+     */\r\n+    public boolean isProviderSide() {\r\n+        return !isConsumerSide();\r\n+    }\r\n+\r\n+    /**\r\n+     * is consumer side.\r\n+     *\r\n+     * @return consumer side.\r\n+     */\r\n+    public boolean isConsumerSide() {\r\n+        return getUrl().getParameter(SIDE_KEY, PROVIDER_SIDE).equals(CONSUMER_SIDE);\r\n+    }\r\n+\r\n+    /**\r\n+     * get CompletableFuture.\r\n+     *\r\n+     * @param <T>\r\n+     * @return future\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> CompletableFuture<T> getCompletableFuture() {\r\n+        return FutureContext.getContext().getCompletableFuture();\r\n+    }\r\n+\r\n+    /**\r\n+     * get future.\r\n+     *\r\n+     * @param <T>\r\n+     * @return future\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> Future<T> getFuture() {\r\n+        return FutureContext.getContext().getCompletableFuture();\r\n+    }\r\n+\r\n+    /**\r\n+     * set future.\r\n+     *\r\n+     * @param future\r\n+     */\r\n+    public void setFuture(CompletableFuture<?> future) {\r\n+        FutureContext.getContext().setFuture(future);\r\n+    }\r\n+\r\n+    public List<URL> getUrls() {\r\n+        return urls == null && url != null ? (List<URL>) Arrays.asList(url) : urls;\r\n+    }\r\n+\r\n+    public void setUrls(List<URL> urls) {\r\n+        this.urls = urls;\r\n+    }\r\n+\r\n+    public URL getUrl() {\r\n+        return url;\r\n+    }\r\n+\r\n+    public void setUrl(URL url) {\r\n+        this.url = url;\r\n+    }\r\n+\r\n+    /**\r\n+     * get method name.\r\n+     *\r\n+     * @return method name.\r\n+     */\r\n+    public String getMethodName() {\r\n+        return methodName;\r\n+    }\r\n+\r\n+    public void setMethodName(String methodName) {\r\n+        this.methodName = methodName;\r\n+    }\r\n+\r\n+    /**\r\n+     * get parameter types.\r\n+     *\r\n+     * @serial\r\n+     */\r\n+    public Class<?>[] getParameterTypes() {\r\n+        return parameterTypes;\r\n+    }\r\n+\r\n+    public void setParameterTypes(Class<?>[] parameterTypes) {\r\n+        this.parameterTypes = parameterTypes;\r\n+    }\r\n+\r\n+    /**\r\n+     * get arguments.\r\n+     *\r\n+     * @return arguments.\r\n+     */\r\n+    public Object[] getArguments() {\r\n+        return arguments;\r\n+    }\r\n+\r\n+    public void setArguments(Object[] arguments) {\r\n+        this.arguments = arguments;\r\n+    }\r\n+\r\n+    /**\r\n+     * set local address.\r\n+     *\r\n+     * @param host\r\n+     * @param port\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setLocalAddress(String host, int port) {\r\n+        if (port < 0) {\r\n+            port = 0;\r\n+        }\r\n+        this.localAddress = InetSocketAddress.createUnresolved(host, port);\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get local address.\r\n+     *\r\n+     * @return local address\r\n+     */\r\n+    public InetSocketAddress getLocalAddress() {\r\n+        return localAddress;\r\n+    }\r\n+\r\n+    /**\r\n+     * set local address.\r\n+     *\r\n+     * @param address\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setLocalAddress(InetSocketAddress address) {\r\n+        this.localAddress = address;\r\n+        return this;\r\n+    }\r\n+\r\n+    public String getLocalAddressString() {\r\n+        return getLocalHost() + \":\" + getLocalPort();\r\n+    }\r\n+\r\n+    /**\r\n+     * get local host name.\r\n+     *\r\n+     * @return local host name\r\n+     */\r\n+    public String getLocalHostName() {\r\n+        String host = localAddress == null ? null : localAddress.getHostName();\r\n+        if (StringUtils.isEmpty(host)) {\r\n+            return getLocalHost();\r\n+        }\r\n+        return host;\r\n+    }\r\n+\r\n+    /**\r\n+     * set remote address.\r\n+     *\r\n+     * @param host\r\n+     * @param port\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setRemoteAddress(String host, int port) {\r\n+        if (port < 0) {\r\n+            port = 0;\r\n+        }\r\n+        this.remoteAddress = InetSocketAddress.createUnresolved(host, port);\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get remote address.\r\n+     *\r\n+     * @return remote address\r\n+     */\r\n+    public InetSocketAddress getRemoteAddress() {\r\n+        return remoteAddress;\r\n+    }\r\n+\r\n+    /**\r\n+     * set remote address.\r\n+     *\r\n+     * @param address\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setRemoteAddress(InetSocketAddress address) {\r\n+        this.remoteAddress = address;\r\n+        return this;\r\n+    }\r\n+\r\n+    public String getRemoteApplicationName() {\r\n+        return remoteApplicationName;\r\n+    }\r\n+\r\n+    public RpcContext setRemoteApplicationName(String remoteApplicationName) {\r\n+        this.remoteApplicationName = remoteApplicationName;\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get remote address string.\r\n+     *\r\n+     * @return remote address string.\r\n+     */\r\n+    public String getRemoteAddressString() {\r\n+        return getRemoteHost() + \":\" + getRemotePort();\r\n+    }\r\n+\r\n+    /**\r\n+     * get remote host name.\r\n+     *\r\n+     * @return remote host name\r\n+     */\r\n+    public String getRemoteHostName() {\r\n+        return remoteAddress == null ? null : remoteAddress.getHostName();\r\n+    }\r\n+\r\n+    /**\r\n+     * get local host.\r\n+     *\r\n+     * @return local host\r\n+     */\r\n+    public String getLocalHost() {\r\n+        String host = localAddress == null ? null :\r\n+                localAddress.getAddress() == null ? localAddress.getHostName()\r\n+                        : NetUtils.filterLocalHost(localAddress.getAddress().getHostAddress());\r\n+        if (host == null || host.length() == 0) {\r\n+            return NetUtils.getLocalHost();\r\n+        }\r\n+        return host;\r\n+    }\r\n+\r\n+    /**\r\n+     * get local port.\r\n+     *\r\n+     * @return port\r\n+     */\r\n+    public int getLocalPort() {\r\n+        return localAddress == null ? 0 : localAddress.getPort();\r\n+    }\r\n+\r\n+    /**\r\n+     * get remote host.\r\n+     *\r\n+     * @return remote host\r\n+     */\r\n+    public String getRemoteHost() {\r\n+        return remoteAddress == null ? null :\r\n+                remoteAddress.getAddress() == null ? remoteAddress.getHostName()\r\n+                        : NetUtils.filterLocalHost(remoteAddress.getAddress().getHostAddress());\r\n+    }\r\n+\r\n+    /**\r\n+     * get remote port.\r\n+     *\r\n+     * @return remote port\r\n+     */\r\n+    public int getRemotePort() {\r\n+        return remoteAddress == null ? 0 : remoteAddress.getPort();\r\n+    }\r\n+\r\n+    /**\r\n+     * also see {@link #getObjectAttachment(String)}.\r\n+     *\r\n+     * @param key\r\n+     * @return attachment\r\n+     */\r\n+    public String getAttachment(String key) {\r\n+        Object value = attachments.get(key);\r\n+        if (value instanceof String) {\r\n+            return (String) value;\r\n+        }\r\n+        return null; // or JSON.toString(value);\r\n+    }\r\n+\r\n+    /**\r\n+     * get attachment.\r\n+     *\r\n+     * @param key\r\n+     * @return attachment\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    public Object getObjectAttachment(String key) {\r\n+        return attachments.get(key);\r\n+    }\r\n+\r\n+    /**\r\n+     * set attachment.\r\n+     *\r\n+     * @param key\r\n+     * @param value\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setAttachment(String key, String value) {\r\n+        return setObjectAttachment(key, (Object) value);\r\n+    }\r\n+\r\n+    public RpcContext setAttachment(String key, Object value) {\r\n+        return setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    public RpcContext setObjectAttachment(String key, Object value) {\r\n+        if (value == null) {\r\n+            attachments.remove(key);\r\n+        } else {\r\n+            attachments.put(key, value);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * remove attachment.\r\n+     *\r\n+     * @param key\r\n+     * @return context\r\n+     */\r\n+    public RpcContext removeAttachment(String key) {\r\n+        attachments.remove(key);\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get attachments.\r\n+     *\r\n+     * @return attachments\r\n+     */\r\n+    @Deprecated\r\n+    public Map<String, String> getAttachments() {\r\n+        return new AttachmentsAdapter.ObjectToStringMap(this.getObjectAttachments());\r\n+    }\r\n+\r\n+    /**\r\n+     * get attachments.\r\n+     *\r\n+     * @return attachments\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    public Map<String, Object> getObjectAttachments() {\r\n+        return attachments;\r\n+    }\r\n+\r\n+    /**\r\n+     * set attachments\r\n+     *\r\n+     * @param attachment\r\n+     * @return context\r\n+     */\r\n+    public RpcContext setAttachments(Map<String, String> attachment) {\r\n+        this.attachments.clear();\r\n+        if (attachment != null && attachment.size() > 0) {\r\n+            this.attachments.putAll(attachment);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * set attachments\r\n+     *\r\n+     * @param attachment\r\n+     * @return context\r\n+     */\r\n+    @Experimental(\"Experiment api for supporting Object transmission\")\r\n+    public RpcContext setObjectAttachments(Map<String, Object> attachment) {\r\n+        this.attachments.clear();\r\n+        if (attachment != null && attachment.size() > 0) {\r\n+            this.attachments.putAll(attachment);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    public void clearAttachments() {\r\n+        this.attachments.clear();\r\n+    }\r\n+\r\n+    /**\r\n+     * get values.\r\n+     *\r\n+     * @return values\r\n+     */\r\n+    public Map<String, Object> get() {\r\n+        return values;\r\n+    }\r\n+\r\n+    /**\r\n+     * set value.\r\n+     *\r\n+     * @param key\r\n+     * @param value\r\n+     * @return context\r\n+     */\r\n+    public RpcContext set(String key, Object value) {\r\n+        if (value == null) {\r\n+            values.remove(key);\r\n+        } else {\r\n+            values.put(key, value);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * remove value.\r\n+     *\r\n+     * @param key\r\n+     * @return value\r\n+     */\r\n+    public RpcContext remove(String key) {\r\n+        values.remove(key);\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get value.\r\n+     *\r\n+     * @param key\r\n+     * @return value\r\n+     */\r\n+    public Object get(String key) {\r\n+        return values.get(key);\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to isProviderSide()\r\n+     */\r\n+    @Deprecated\r\n+    public boolean isServerSide() {\r\n+        return isProviderSide();\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to isConsumerSide()\r\n+     */\r\n+    @Deprecated\r\n+    public boolean isClientSide() {\r\n+        return isConsumerSide();\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to getUrls()\r\n+     */\r\n+    @Deprecated\r\n+    @SuppressWarnings({\"unchecked\", \"rawtypes\"})\r\n+    public List<Invoker<?>> getInvokers() {\r\n+        return invokers == null && invoker != null ? (List) Arrays.asList(invoker) : invokers;\r\n+    }\r\n+\r\n+    public RpcContext setInvokers(List<Invoker<?>> invokers) {\r\n+        this.invokers = invokers;\r\n+        if (CollectionUtils.isNotEmpty(invokers)) {\r\n+            List<URL> urls = new ArrayList<URL>(invokers.size());\r\n+            for (Invoker<?> invoker : invokers) {\r\n+                urls.add(invoker.getUrl());\r\n+            }\r\n+            setUrls(urls);\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to getUrl()\r\n+     */\r\n+    @Deprecated\r\n+    public Invoker<?> getInvoker() {\r\n+        return invoker;\r\n+    }\r\n+\r\n+    public RpcContext setInvoker(Invoker<?> invoker) {\r\n+        this.invoker = invoker;\r\n+        if (invoker != null) {\r\n+            setUrl(invoker.getUrl());\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * @deprecated Replace to getMethodName(), getParameterTypes(), getArguments()\r\n+     */\r\n+    @Deprecated\r\n+    public Invocation getInvocation() {\r\n+        return invocation;\r\n+    }\r\n+\r\n+    public RpcContext setInvocation(Invocation invocation) {\r\n+        this.invocation = invocation;\r\n+        if (invocation != null) {\r\n+            setMethodName(invocation.getMethodName());\r\n+            setParameterTypes(invocation.getParameterTypes());\r\n+            setArguments(invocation.getArguments());\r\n+        }\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * Async invocation. Timeout will be handled even if <code>Future.get()</code> is not called.\r\n+     *\r\n+     * @param callable\r\n+     * @return get the return result from <code>future.get()</code>\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> CompletableFuture<T> asyncCall(Callable<T> callable) {\r\n+        try {\r\n+            try {\r\n+                setAttachment(ASYNC_KEY, Boolean.TRUE.toString());\r\n+                final T o = callable.call();\r\n+                //local invoke will return directly\r\n+                if (o != null) {\r\n+                    if (o instanceof CompletableFuture) {\r\n+                        return (CompletableFuture<T>) o;\r\n+                    }\r\n+                    return CompletableFuture.completedFuture(o);\r\n+                } else {\r\n+                    // The service has a normal sync method signature, should get future from RpcContext.\r\n+                }\r\n+            } catch (Exception e) {\r\n+                throw new RpcException(e);\r\n+            } finally {\r\n+                removeAttachment(ASYNC_KEY);\r\n+            }\r\n+        } catch (final RpcException e) {\r\n+            CompletableFuture<T> exceptionFuture = new CompletableFuture<>();\r\n+            exceptionFuture.completeExceptionally(e);\r\n+            return exceptionFuture;\r\n+        }\r\n+        return ((CompletableFuture<T>) getContext().getFuture());\r\n+    }\r\n+\r\n+    /**\r\n+     * one way async call, send request only, and result is not required\r\n+     *\r\n+     * @param runnable\r\n+     */\r\n+    public void asyncCall(Runnable runnable) {\r\n+        try {\r\n+            setAttachment(RETURN_KEY, Boolean.FALSE.toString());\r\n+            runnable.run();\r\n+        } catch (Throwable e) {\r\n+            // FIXME should put exception in future?\r\n+            throw new RpcException(\"oneway call error .\" + e.getMessage(), e);\r\n+        } finally {\r\n+            removeAttachment(RETURN_KEY);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * @return\r\n+     * @throws IllegalStateException\r\n+     */\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public static AsyncContext startAsync() throws IllegalStateException {\r\n+        RpcContext currentContext = getContext();\r\n+        if (currentContext.asyncContext == null) {\r\n+            currentContext.asyncContext = new AsyncContextImpl();\r\n+        }\r\n+        currentContext.asyncContext.start();\r\n+        return currentContext.asyncContext;\r\n+    }\r\n+\r\n+    protected void setAsyncContext(AsyncContext asyncContext) {\r\n+        this.asyncContext = asyncContext;\r\n+    }\r\n+\r\n+    public boolean isAsyncStarted() {\r\n+        if (this.asyncContext == null) {\r\n+            return false;\r\n+        }\r\n+        return asyncContext.isAsyncStarted();\r\n+    }\r\n+\r\n+    public boolean stopAsync() {\r\n+        return asyncContext.stop();\r\n+    }\r\n+\r\n+    public AsyncContext getAsyncContext() {\r\n+        return asyncContext;\r\n+    }\r\n+\r\n+    // RPC service context updated before each service call.\r\n+    private URL consumerUrl;\r\n+\r\n+    public String getGroup() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getParameter(GROUP_KEY);\r\n+    }\r\n+\r\n+    public String getVersion() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getParameter(VERSION_KEY);\r\n+    }\r\n+\r\n+    public String getInterfaceName() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getServiceInterface();\r\n+    }\r\n+\r\n+    public String getProtocol() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getParameter(PROTOCOL_KEY, DUBBO);\r\n+    }\r\n+\r\n+    public String getServiceKey() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getServiceKey();\r\n+    }\r\n+\r\n+    public String getProtocolServiceKey() {\r\n+        if (consumerUrl == null) {\r\n+            return null;\r\n+        }\r\n+        return consumerUrl.getProtocolServiceKey();\r\n+    }\r\n+\r\n+    public URL getConsumerUrl() {\r\n+        return consumerUrl;\r\n+    }\r\n+\r\n+    public void setConsumerUrl(URL consumerUrl) {\r\n+        this.consumerUrl = consumerUrl;\r\n+    }\r\n+\r\n+    public static void setRpcContext(URL url) {\r\n+        RpcContext rpcContext = RpcContext.getContext();\r\n+        rpcContext.setConsumerUrl(url);\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/RpcException.java", "source2": "org/apache/dubbo/rpc/RpcException.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;\n-\n-import javax.naming.LimitExceededException;\n-\n-/**\n- * RPC Exception. (API, Prototype, ThreadSafe)\n- *\n- * @serial Don't change the class name and properties.\n- * @export\n- * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\n- * @since 1.0\n- */\n-public /**final**/ class RpcException extends RuntimeException {\n-\n-    public static final int UNKNOWN_EXCEPTION = 0;\n-    public static final int NETWORK_EXCEPTION = 1;\n-    public static final int TIMEOUT_EXCEPTION = 2;\n-    public static final int BIZ_EXCEPTION = 3;\n-    public static final int FORBIDDEN_EXCEPTION = 4;\n-    public static final int SERIALIZATION_EXCEPTION = 5;\n-    public static final int NO_INVOKER_AVAILABLE_AFTER_FILTER = 6;\n-    public static final int LIMIT_EXCEEDED_EXCEPTION = 7;\n-    public static final int TIMEOUT_TERMINATE = 8;\n-    private static final long serialVersionUID = 7815426752583648734L;\n-    /**\n-     * RpcException cannot be extended, use error code for exception type to keep compatibility\n-     */\n-    private int code;\n-\n-    public RpcException() {\n-        super();\n-    }\n-\n-    public RpcException(String message, Throwable cause) {\n-        super(message, cause);\n-    }\n-\n-    public RpcException(String message) {\n-        super(message);\n-    }\n-\n-    public RpcException(Throwable cause) {\n-        super(cause);\n-    }\n-\n-    public RpcException(int code) {\n-        super();\n-        this.code = code;\n-    }\n-\n-    public RpcException(int code, String message, Throwable cause) {\n-        super(message, cause);\n-        this.code = code;\n-    }\n-\n-    public RpcException(int code, String message) {\n-        super(message);\n-        this.code = code;\n-    }\n-\n-    public RpcException(int code, Throwable cause) {\n-        super(cause);\n-        this.code = code;\n-    }\n-\n-    public int getCode() {\n-        return code;\n-    }\n-\n-    public void setCode(int code) {\n-        this.code = code;\n-    }\n-\n-    public boolean isBiz() {\n-        return code == BIZ_EXCEPTION;\n-    }\n-\n-    public boolean isForbidden() {\n-        return code == FORBIDDEN_EXCEPTION;\n-    }\n-\n-    public boolean isTimeout() {\n-        return code == TIMEOUT_EXCEPTION;\n-    }\n-\n-    public boolean isNetwork() {\n-        return code == NETWORK_EXCEPTION;\n-    }\n-\n-    public boolean isSerialization() {\n-        return code == SERIALIZATION_EXCEPTION;\n-    }\n-\n-    public boolean isNoInvokerAvailableAfterFilter() {\n-        return code == NO_INVOKER_AVAILABLE_AFTER_FILTER;\n-    }\n-\n-    public boolean isLimitExceed() {\n-        return code == LIMIT_EXCEEDED_EXCEPTION || getCause() instanceof LimitExceededException;\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;\r\n+\r\n+import javax.naming.LimitExceededException;\r\n+\r\n+/**\r\n+ * RPC Exception. (API, Prototype, ThreadSafe)\r\n+ *\r\n+ * @serial Don't change the class name and properties.\r\n+ * @export\r\n+ * @see org.apache.dubbo.rpc.Invoker#invoke(Invocation)\r\n+ * @since 1.0\r\n+ */\r\n+public /**final**/ class RpcException extends RuntimeException {\r\n+\r\n+    public static final int UNKNOWN_EXCEPTION = 0;\r\n+    public static final int NETWORK_EXCEPTION = 1;\r\n+    public static final int TIMEOUT_EXCEPTION = 2;\r\n+    public static final int BIZ_EXCEPTION = 3;\r\n+    public static final int FORBIDDEN_EXCEPTION = 4;\r\n+    public static final int SERIALIZATION_EXCEPTION = 5;\r\n+    public static final int NO_INVOKER_AVAILABLE_AFTER_FILTER = 6;\r\n+    public static final int LIMIT_EXCEEDED_EXCEPTION = 7;\r\n+    public static final int TIMEOUT_TERMINATE = 8;\r\n+    private static final long serialVersionUID = 7815426752583648734L;\r\n+    /**\r\n+     * RpcException cannot be extended, use error code for exception type to keep compatibility\r\n+     */\r\n+    private int code;\r\n+\r\n+    public RpcException() {\r\n+        super();\r\n+    }\r\n+\r\n+    public RpcException(String message, Throwable cause) {\r\n+        super(message, cause);\r\n+    }\r\n+\r\n+    public RpcException(String message) {\r\n+        super(message);\r\n+    }\r\n+\r\n+    public RpcException(Throwable cause) {\r\n+        super(cause);\r\n+    }\r\n+\r\n+    public RpcException(int code) {\r\n+        super();\r\n+        this.code = code;\r\n+    }\r\n+\r\n+    public RpcException(int code, String message, Throwable cause) {\r\n+        super(message, cause);\r\n+        this.code = code;\r\n+    }\r\n+\r\n+    public RpcException(int code, String message) {\r\n+        super(message);\r\n+        this.code = code;\r\n+    }\r\n+\r\n+    public RpcException(int code, Throwable cause) {\r\n+        super(cause);\r\n+        this.code = code;\r\n+    }\r\n+\r\n+    public int getCode() {\r\n+        return code;\r\n+    }\r\n+\r\n+    public void setCode(int code) {\r\n+        this.code = code;\r\n+    }\r\n+\r\n+    public boolean isBiz() {\r\n+        return code == BIZ_EXCEPTION;\r\n+    }\r\n+\r\n+    public boolean isForbidden() {\r\n+        return code == FORBIDDEN_EXCEPTION;\r\n+    }\r\n+\r\n+    public boolean isTimeout() {\r\n+        return code == TIMEOUT_EXCEPTION;\r\n+    }\r\n+\r\n+    public boolean isNetwork() {\r\n+        return code == NETWORK_EXCEPTION;\r\n+    }\r\n+\r\n+    public boolean isSerialization() {\r\n+        return code == SERIALIZATION_EXCEPTION;\r\n+    }\r\n+\r\n+    public boolean isNoInvokerAvailableAfterFilter() {\r\n+        return code == NO_INVOKER_AVAILABLE_AFTER_FILTER;\r\n+    }\r\n+\r\n+    public boolean isLimitExceed() {\r\n+        return code == LIMIT_EXCEEDED_EXCEPTION || getCause() instanceof LimitExceededException;\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/RpcInvocation.java", "source2": "org/apache/dubbo/rpc/RpcInvocation.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,441 +1,441 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.MethodDescriptor;\n-import org.apache.dubbo.rpc.model.ServiceDescriptor;\n-import org.apache.dubbo.rpc.model.ServiceRepository;\n-import org.apache.dubbo.rpc.support.RpcUtils;\n-\n-import java.io.Serializable;\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.Arrays;\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.stream.Stream;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\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.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\n-\n-/**\n- * RPC Invocation.\n- *\n- * @serial Don't change the class name and properties.\n- */\n-public class RpcInvocation implements Invocation, Serializable {\n-\n-    private static final long serialVersionUID = -4355285085441097045L;\n-\n-    private String targetServiceUniqueName;\n-    private String protocolServiceKey;\n-\n-    private String methodName;\n-    private String serviceName;\n-\n-    private transient Class<?>[] parameterTypes;\n-    private String parameterTypesDesc;\n-    private String[] compatibleParamSignatures;\n-\n-    private Object[] arguments;\n-\n-    /**\n-     * Passed to the remote server during RPC call\n-     */\n-    private Map<String, Object> attachments;\n-\n-    /**\n-     * Only used on the caller side, will not appear on the wire.\n-     */\n-    private Map<Object, Object> attributes = new HashMap<>();\n-\n-    private transient Invoker<?> invoker;\n-\n-    private transient Class<?> returnType;\n-\n-    private transient Type[] returnTypes;\n-\n-    private transient InvokeMode invokeMode;\n-\n-    public RpcInvocation() {\n-    }\n-\n-    public RpcInvocation(Invocation invocation, Invoker<?> invoker) {\n-        this(invocation.getMethodName(), invocation.getServiceName(), invocation.getProtocolServiceKey(),\n-                invocation.getParameterTypes(), invocation.getArguments(), new HashMap<>(invocation.getObjectAttachments()),\n-                invocation.getInvoker(), invocation.getAttributes());\n-        if (invoker != null) {\n-            URL url = invoker.getUrl();\n-            setAttachment(PATH_KEY, url.getPath());\n-            if (url.hasParameter(INTERFACE_KEY)) {\n-                setAttachment(INTERFACE_KEY, url.getParameter(INTERFACE_KEY));\n-            }\n-            if (url.hasParameter(GROUP_KEY)) {\n-                setAttachment(GROUP_KEY, url.getParameter(GROUP_KEY));\n-            }\n-            if (url.hasParameter(VERSION_KEY)) {\n-                setAttachment(VERSION_KEY, url.getParameter(VERSION_KEY, \"0.0.0\"));\n-            }\n-            if (url.hasParameter(TIMEOUT_KEY)) {\n-                setAttachment(TIMEOUT_KEY, url.getParameter(TIMEOUT_KEY));\n-            }\n-            if (url.hasParameter(TOKEN_KEY)) {\n-                setAttachment(TOKEN_KEY, url.getParameter(TOKEN_KEY));\n-            }\n-            if (url.hasParameter(APPLICATION_KEY)) {\n-                setAttachment(APPLICATION_KEY, url.getParameter(APPLICATION_KEY));\n-            }\n-        }\n-        this.targetServiceUniqueName = invocation.getTargetServiceUniqueName();\n-        this.protocolServiceKey = invocation.getProtocolServiceKey();\n-    }\n-\n-    public RpcInvocation(Invocation invocation) {\n-        this(invocation.getMethodName(), invocation.getServiceName(), invocation.getProtocolServiceKey(), invocation.getParameterTypes(),\n-                invocation.getArguments(), invocation.getObjectAttachments(), invocation.getInvoker(), invocation.getAttributes());\n-        this.targetServiceUniqueName = invocation.getTargetServiceUniqueName();\n-    }\n-\n-    public RpcInvocation(Method method, String serviceName, String protocolServiceKey, Object[] arguments) {\n-        this(method, serviceName, protocolServiceKey, arguments, null, null);\n-    }\n-\n-    public RpcInvocation(Method method, String serviceName, String protocolServiceKey, Object[] arguments, Map<String, Object> attachment, Map<Object, Object> attributes) {\n-        this(method.getName(), serviceName, protocolServiceKey, method.getParameterTypes(), arguments, attachment, null, attributes);\n-        this.returnType = method.getReturnType();\n-    }\n-\n-    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments) {\n-        this(methodName, serviceName, protocolServiceKey, parameterTypes, arguments, null, null, null);\n-    }\n-\n-    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments, Map<String, Object> attachments) {\n-        this(methodName, serviceName, protocolServiceKey, parameterTypes, arguments, attachments, null, null);\n-    }\n-\n-    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments,\n-                         Map<String, Object> attachments, Invoker<?> invoker, Map<Object, Object> attributes) {\n-        this.methodName = methodName;\n-        this.serviceName = serviceName;\n-        this.protocolServiceKey = protocolServiceKey;\n-        this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;\n-        this.arguments = arguments == null ? new Object[0] : arguments;\n-        this.attachments = attachments == null ? new HashMap<>() : attachments;\n-        this.attributes = attributes == null ? new HashMap<>() : attributes;\n-        this.invoker = invoker;\n-        initParameterDesc();\n-    }\n-\n-    private void initParameterDesc() {\n-        ServiceRepository repository = ApplicationModel.getServiceRepository();\n-        if (StringUtils.isNotEmpty(serviceName)) {\n-            ServiceDescriptor serviceDescriptor = repository.lookupService(serviceName);\n-            if (serviceDescriptor != null) {\n-                MethodDescriptor methodDescriptor = serviceDescriptor.getMethod(methodName, parameterTypes);\n-                if (methodDescriptor != null) {\n-                    this.parameterTypesDesc = methodDescriptor.getParamDesc();\n-                    this.compatibleParamSignatures = methodDescriptor.getCompatibleParamSignatures();\n-                    this.returnTypes = methodDescriptor.getReturnTypes();\n-                }\n-            }\n-        }\n-\n-        if (parameterTypesDesc == null) {\n-            this.parameterTypesDesc = ReflectUtils.getDesc(this.getParameterTypes());\n-            this.compatibleParamSignatures = Stream.of(this.parameterTypes).map(Class::getName).toArray(String[]::new);\n-            this.returnTypes = RpcUtils.getReturnTypes(this);\n-        }\n-    }\n-\n-    @Override\n-    public Invoker<?> getInvoker() {\n-        return invoker;\n-    }\n-\n-    public void setInvoker(Invoker<?> invoker) {\n-        this.invoker = invoker;\n-    }\n-\n-    public Object put(Object key, Object value) {\n-        return attributes.put(key, value);\n-    }\n-\n-    public Object get(Object key) {\n-        return attributes.get(key);\n-    }\n-\n-    @Override\n-    public Map<Object, Object> getAttributes() {\n-        return attributes;\n-    }\n-\n-    @Override\n-    public String getTargetServiceUniqueName() {\n-        return targetServiceUniqueName;\n-    }\n-\n-    @Override\n-    public String getProtocolServiceKey() {\n-        return protocolServiceKey;\n-    }\n-\n-    public void setTargetServiceUniqueName(String targetServiceUniqueName) {\n-        this.targetServiceUniqueName = targetServiceUniqueName;\n-    }\n-\n-    @Override\n-    public String getMethodName() {\n-        return methodName;\n-    }\n-\n-    @Override\n-    public String getServiceName() {\n-        return serviceName;\n-    }\n-\n-    public void setServiceName(String serviceName) {\n-        this.serviceName = serviceName;\n-    }\n-\n-    public void setMethodName(String methodName) {\n-        this.methodName = methodName;\n-    }\n-\n-    @Override\n-    public Class<?>[] getParameterTypes() {\n-        return parameterTypes;\n-    }\n-\n-    public void setParameterTypes(Class<?>[] parameterTypes) {\n-        this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;\n-    }\n-\n-    public String getParameterTypesDesc() {\n-        return parameterTypesDesc;\n-    }\n-\n-    public void setParameterTypesDesc(String parameterTypesDesc) {\n-        this.parameterTypesDesc = parameterTypesDesc;\n-    }\n-\n-    public String[] getCompatibleParamSignatures() {\n-        return compatibleParamSignatures;\n-    }\n-\n-    // parameter signatures can be set independently, it is useful when the service type is not found on caller side and\n-    // the invocation is not generic invocation either.\n-    public void setCompatibleParamSignatures(String[] compatibleParamSignatures) {\n-        this.compatibleParamSignatures = compatibleParamSignatures;\n-    }\n-\n-    @Override\n-    public Object[] getArguments() {\n-        return arguments;\n-    }\n-\n-    public void setArguments(Object[] arguments) {\n-        this.arguments = arguments == null ? new Object[0] : arguments;\n-    }\n-\n-    @Override\n-    public Map<String, Object> getObjectAttachments() {\n-        return attachments;\n-    }\n-\n-    @Override\n-    public void setAttachment(String key, String value) {\n-        setObjectAttachment(key, value);\n-    }\n-\n-    @Deprecated\n-    @Override\n-    public Map<String, String> getAttachments() {\n-        return new AttachmentsAdapter.ObjectToStringMap(attachments);\n-    }\n-\n-    @Deprecated\n-    public void setAttachments(Map<String, String> attachments) {\n-        this.attachments = attachments == null ? new HashMap<>() : new HashMap<>(attachments);\n-    }\n-\n-    public void setObjectAttachments(Map<String, Object> attachments) {\n-        this.attachments = attachments == null ? new HashMap<>() : attachments;\n-    }\n-\n-    public void setAttachment(String key, Object value) {\n-       setObjectAttachment(key, value);\n-    }\n-\n-    @Override\n-    public void setObjectAttachment(String key, Object value) {\n-        if (attachments == null) {\n-            attachments = new HashMap<>();\n-        }\n-        attachments.put(key, value);\n-    }\n-\n-    @Override\n-    public void setAttachmentIfAbsent(String key, String value) {\n-        setObjectAttachmentIfAbsent(key, value);\n-    }\n-\n-    public void setAttachmentIfAbsent(String key, Object value) {\n-        setObjectAttachmentIfAbsent(key, value);\n-    }\n-\n-    @Override\n-    public void setObjectAttachmentIfAbsent(String key, Object value) {\n-        if (attachments == null) {\n-            attachments = new HashMap<>();\n-        }\n-        if (!attachments.containsKey(key)) {\n-            attachments.put(key, value);\n-        }\n-    }\n-\n-    @Deprecated\n-    public void addAttachments(Map<String, String> attachments) {\n-        if (attachments == null) {\n-            return;\n-        }\n-        if (this.attachments == null) {\n-            this.attachments = new HashMap<>();\n-        }\n-        this.attachments.putAll(attachments);\n-    }\n-\n-    public void addObjectAttachments(Map<String, Object> attachments) {\n-        if (attachments == null) {\n-            return;\n-        }\n-        if (this.attachments == null) {\n-            this.attachments = new HashMap<>();\n-        }\n-        this.attachments.putAll(attachments);\n-    }\n-\n-    @Deprecated\n-    public void addAttachmentsIfAbsent(Map<String, String> attachments) {\n-        if (attachments == null) {\n-            return;\n-        }\n-        for (Map.Entry<String, String> entry : attachments.entrySet()) {\n-            setAttachmentIfAbsent(entry.getKey(), entry.getValue());\n-        }\n-    }\n-\n-    public void addObjectAttachmentsIfAbsent(Map<String, Object> attachments) {\n-        if (attachments == null) {\n-            return;\n-        }\n-        for (Map.Entry<String, Object> entry : attachments.entrySet()) {\n-            setAttachmentIfAbsent(entry.getKey(), entry.getValue());\n-        }\n-    }\n-\n-    @Override\n-    @Deprecated\n-    public String getAttachment(String key) {\n-        if (attachments == null) {\n-            return null;\n-        }\n-        Object value = attachments.get(key);\n-        if (value instanceof String) {\n-            return (String) value;\n-        }\n-        return null;\n-    }\n-\n-    @Override\n-    public Object getObjectAttachment(String key) {\n-        if (attachments == null) {\n-            return null;\n-        }\n-        return attachments.get(key);\n-    }\n-\n-    @Override\n-    @Deprecated\n-    public String getAttachment(String key, String defaultValue) {\n-        if (attachments == null) {\n-            return defaultValue;\n-        }\n-        Object value = attachments.get(key);\n-        if (value instanceof String) {\n-            String strValue = (String) value;\n-            if (StringUtils.isEmpty(strValue)) {\n-                return defaultValue;\n-            } else {\n-                return strValue;\n-            }\n-        }\n-        return null;\n-    }\n-\n-    @Deprecated\n-    public Object getObjectAttachment(String key, Object defaultValue) {\n-        if (attachments == null) {\n-            return defaultValue;\n-        }\n-        Object value = attachments.get(key);\n-        if (value == null) {\n-            return defaultValue;\n-        }\n-        return value;\n-    }\n-\n-    public Class<?> getReturnType() {\n-        return returnType;\n-    }\n-\n-    public void setReturnType(Class<?> returnType) {\n-        this.returnType = returnType;\n-    }\n-\n-    public Type[] getReturnTypes() {\n-        return returnTypes;\n-    }\n-\n-    public void setReturnTypes(Type[] returnTypes) {\n-        this.returnTypes = returnTypes;\n-    }\n-\n-    public InvokeMode getInvokeMode() {\n-        return invokeMode;\n-    }\n-\n-    public void setInvokeMode(InvokeMode invokeMode) {\n-        this.invokeMode = invokeMode;\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return \"RpcInvocation [methodName=\" + methodName + \", parameterTypes=\"\n-                + Arrays.toString(parameterTypes) + \", arguments=\" + Arrays.toString(arguments)\n-                + \", attachments=\" + attachments + \"]\";\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.MethodDescriptor;\r\n+import org.apache.dubbo.rpc.model.ServiceDescriptor;\r\n+import org.apache.dubbo.rpc.model.ServiceRepository;\r\n+import org.apache.dubbo.rpc.support.RpcUtils;\r\n+\r\n+import java.io.Serializable;\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.Arrays;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\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.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\r\n+\r\n+/**\r\n+ * RPC Invocation.\r\n+ *\r\n+ * @serial Don't change the class name and properties.\r\n+ */\r\n+public class RpcInvocation implements Invocation, Serializable {\r\n+\r\n+    private static final long serialVersionUID = -4355285085441097045L;\r\n+\r\n+    private String targetServiceUniqueName;\r\n+    private String protocolServiceKey;\r\n+\r\n+    private String methodName;\r\n+    private String serviceName;\r\n+\r\n+    private transient Class<?>[] parameterTypes;\r\n+    private String parameterTypesDesc;\r\n+    private String[] compatibleParamSignatures;\r\n+\r\n+    private Object[] arguments;\r\n+\r\n+    /**\r\n+     * Passed to the remote server during RPC call\r\n+     */\r\n+    private Map<String, Object> attachments;\r\n+\r\n+    /**\r\n+     * Only used on the caller side, will not appear on the wire.\r\n+     */\r\n+    private Map<Object, Object> attributes = new HashMap<>();\r\n+\r\n+    private transient Invoker<?> invoker;\r\n+\r\n+    private transient Class<?> returnType;\r\n+\r\n+    private transient Type[] returnTypes;\r\n+\r\n+    private transient InvokeMode invokeMode;\r\n+\r\n+    public RpcInvocation() {\r\n+    }\r\n+\r\n+    public RpcInvocation(Invocation invocation, Invoker<?> invoker) {\r\n+        this(invocation.getMethodName(), invocation.getServiceName(), invocation.getProtocolServiceKey(),\r\n+                invocation.getParameterTypes(), invocation.getArguments(), new HashMap<>(invocation.getObjectAttachments()),\r\n+                invocation.getInvoker(), invocation.getAttributes());\r\n+        if (invoker != null) {\r\n+            URL url = invoker.getUrl();\r\n+            setAttachment(PATH_KEY, url.getPath());\r\n+            if (url.hasParameter(INTERFACE_KEY)) {\r\n+                setAttachment(INTERFACE_KEY, url.getParameter(INTERFACE_KEY));\r\n+            }\r\n+            if (url.hasParameter(GROUP_KEY)) {\r\n+                setAttachment(GROUP_KEY, url.getParameter(GROUP_KEY));\r\n+            }\r\n+            if (url.hasParameter(VERSION_KEY)) {\r\n+                setAttachment(VERSION_KEY, url.getParameter(VERSION_KEY, \"0.0.0\"));\r\n+            }\r\n+            if (url.hasParameter(TIMEOUT_KEY)) {\r\n+                setAttachment(TIMEOUT_KEY, url.getParameter(TIMEOUT_KEY));\r\n+            }\r\n+            if (url.hasParameter(TOKEN_KEY)) {\r\n+                setAttachment(TOKEN_KEY, url.getParameter(TOKEN_KEY));\r\n+            }\r\n+            if (url.hasParameter(APPLICATION_KEY)) {\r\n+                setAttachment(APPLICATION_KEY, url.getParameter(APPLICATION_KEY));\r\n+            }\r\n+        }\r\n+        this.targetServiceUniqueName = invocation.getTargetServiceUniqueName();\r\n+        this.protocolServiceKey = invocation.getProtocolServiceKey();\r\n+    }\r\n+\r\n+    public RpcInvocation(Invocation invocation) {\r\n+        this(invocation.getMethodName(), invocation.getServiceName(), invocation.getProtocolServiceKey(), invocation.getParameterTypes(),\r\n+                invocation.getArguments(), invocation.getObjectAttachments(), invocation.getInvoker(), invocation.getAttributes());\r\n+        this.targetServiceUniqueName = invocation.getTargetServiceUniqueName();\r\n+    }\r\n+\r\n+    public RpcInvocation(Method method, String serviceName, String protocolServiceKey, Object[] arguments) {\r\n+        this(method, serviceName, protocolServiceKey, arguments, null, null);\r\n+    }\r\n+\r\n+    public RpcInvocation(Method method, String serviceName, String protocolServiceKey, Object[] arguments, Map<String, Object> attachment, Map<Object, Object> attributes) {\r\n+        this(method.getName(), serviceName, protocolServiceKey, method.getParameterTypes(), arguments, attachment, null, attributes);\r\n+        this.returnType = method.getReturnType();\r\n+    }\r\n+\r\n+    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments) {\r\n+        this(methodName, serviceName, protocolServiceKey, parameterTypes, arguments, null, null, null);\r\n+    }\r\n+\r\n+    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments, Map<String, Object> attachments) {\r\n+        this(methodName, serviceName, protocolServiceKey, parameterTypes, arguments, attachments, null, null);\r\n+    }\r\n+\r\n+    public RpcInvocation(String methodName, String serviceName, String protocolServiceKey, Class<?>[] parameterTypes, Object[] arguments,\r\n+                         Map<String, Object> attachments, Invoker<?> invoker, Map<Object, Object> attributes) {\r\n+        this.methodName = methodName;\r\n+        this.serviceName = serviceName;\r\n+        this.protocolServiceKey = protocolServiceKey;\r\n+        this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;\r\n+        this.arguments = arguments == null ? new Object[0] : arguments;\r\n+        this.attachments = attachments == null ? new HashMap<>() : attachments;\r\n+        this.attributes = attributes == null ? new HashMap<>() : attributes;\r\n+        this.invoker = invoker;\r\n+        initParameterDesc();\r\n+    }\r\n+\r\n+    private void initParameterDesc() {\r\n+        ServiceRepository repository = ApplicationModel.getServiceRepository();\r\n+        if (StringUtils.isNotEmpty(serviceName)) {\r\n+            ServiceDescriptor serviceDescriptor = repository.lookupService(serviceName);\r\n+            if (serviceDescriptor != null) {\r\n+                MethodDescriptor methodDescriptor = serviceDescriptor.getMethod(methodName, parameterTypes);\r\n+                if (methodDescriptor != null) {\r\n+                    this.parameterTypesDesc = methodDescriptor.getParamDesc();\r\n+                    this.compatibleParamSignatures = methodDescriptor.getCompatibleParamSignatures();\r\n+                    this.returnTypes = methodDescriptor.getReturnTypes();\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        if (parameterTypesDesc == null) {\r\n+            this.parameterTypesDesc = ReflectUtils.getDesc(this.getParameterTypes());\r\n+            this.compatibleParamSignatures = Stream.of(this.parameterTypes).map(Class::getName).toArray(String[]::new);\r\n+            this.returnTypes = RpcUtils.getReturnTypes(this);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public Invoker<?> getInvoker() {\r\n+        return invoker;\r\n+    }\r\n+\r\n+    public void setInvoker(Invoker<?> invoker) {\r\n+        this.invoker = invoker;\r\n+    }\r\n+\r\n+    public Object put(Object key, Object value) {\r\n+        return attributes.put(key, value);\r\n+    }\r\n+\r\n+    public Object get(Object key) {\r\n+        return attributes.get(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Map<Object, Object> getAttributes() {\r\n+        return attributes;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getTargetServiceUniqueName() {\r\n+        return targetServiceUniqueName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getProtocolServiceKey() {\r\n+        return protocolServiceKey;\r\n+    }\r\n+\r\n+    public void setTargetServiceUniqueName(String targetServiceUniqueName) {\r\n+        this.targetServiceUniqueName = targetServiceUniqueName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getMethodName() {\r\n+        return methodName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getServiceName() {\r\n+        return serviceName;\r\n+    }\r\n+\r\n+    public void setServiceName(String serviceName) {\r\n+        this.serviceName = serviceName;\r\n+    }\r\n+\r\n+    public void setMethodName(String methodName) {\r\n+        this.methodName = methodName;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Class<?>[] getParameterTypes() {\r\n+        return parameterTypes;\r\n+    }\r\n+\r\n+    public void setParameterTypes(Class<?>[] parameterTypes) {\r\n+        this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;\r\n+    }\r\n+\r\n+    public String getParameterTypesDesc() {\r\n+        return parameterTypesDesc;\r\n+    }\r\n+\r\n+    public void setParameterTypesDesc(String parameterTypesDesc) {\r\n+        this.parameterTypesDesc = parameterTypesDesc;\r\n+    }\r\n+\r\n+    public String[] getCompatibleParamSignatures() {\r\n+        return compatibleParamSignatures;\r\n+    }\r\n+\r\n+    // parameter signatures can be set independently, it is useful when the service type is not found on caller side and\r\n+    // the invocation is not generic invocation either.\r\n+    public void setCompatibleParamSignatures(String[] compatibleParamSignatures) {\r\n+        this.compatibleParamSignatures = compatibleParamSignatures;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object[] getArguments() {\r\n+        return arguments;\r\n+    }\r\n+\r\n+    public void setArguments(Object[] arguments) {\r\n+        this.arguments = arguments == null ? new Object[0] : arguments;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Map<String, Object> getObjectAttachments() {\r\n+        return attachments;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachment(String key, String value) {\r\n+        setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    @Override\r\n+    public Map<String, String> getAttachments() {\r\n+        return new AttachmentsAdapter.ObjectToStringMap(attachments);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void setAttachments(Map<String, String> attachments) {\r\n+        this.attachments = attachments == null ? new HashMap<>() : new HashMap<>(attachments);\r\n+    }\r\n+\r\n+    public void setObjectAttachments(Map<String, Object> attachments) {\r\n+        this.attachments = attachments == null ? new HashMap<>() : attachments;\r\n+    }\r\n+\r\n+    public void setAttachment(String key, Object value) {\r\n+       setObjectAttachment(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachment(String key, Object value) {\r\n+        if (attachments == null) {\r\n+            attachments = new HashMap<>();\r\n+        }\r\n+        attachments.put(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAttachmentIfAbsent(String key, String value) {\r\n+        setObjectAttachmentIfAbsent(key, value);\r\n+    }\r\n+\r\n+    public void setAttachmentIfAbsent(String key, Object value) {\r\n+        setObjectAttachmentIfAbsent(key, value);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setObjectAttachmentIfAbsent(String key, Object value) {\r\n+        if (attachments == null) {\r\n+            attachments = new HashMap<>();\r\n+        }\r\n+        if (!attachments.containsKey(key)) {\r\n+            attachments.put(key, value);\r\n+        }\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void addAttachments(Map<String, String> attachments) {\r\n+        if (attachments == null) {\r\n+            return;\r\n+        }\r\n+        if (this.attachments == null) {\r\n+            this.attachments = new HashMap<>();\r\n+        }\r\n+        this.attachments.putAll(attachments);\r\n+    }\r\n+\r\n+    public void addObjectAttachments(Map<String, Object> attachments) {\r\n+        if (attachments == null) {\r\n+            return;\r\n+        }\r\n+        if (this.attachments == null) {\r\n+            this.attachments = new HashMap<>();\r\n+        }\r\n+        this.attachments.putAll(attachments);\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public void addAttachmentsIfAbsent(Map<String, String> attachments) {\r\n+        if (attachments == null) {\r\n+            return;\r\n+        }\r\n+        for (Map.Entry<String, String> entry : attachments.entrySet()) {\r\n+            setAttachmentIfAbsent(entry.getKey(), entry.getValue());\r\n+        }\r\n+    }\r\n+\r\n+    public void addObjectAttachmentsIfAbsent(Map<String, Object> attachments) {\r\n+        if (attachments == null) {\r\n+            return;\r\n+        }\r\n+        for (Map.Entry<String, Object> entry : attachments.entrySet()) {\r\n+            setAttachmentIfAbsent(entry.getKey(), entry.getValue());\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    @Deprecated\r\n+    public String getAttachment(String key) {\r\n+        if (attachments == null) {\r\n+            return null;\r\n+        }\r\n+        Object value = attachments.get(key);\r\n+        if (value instanceof String) {\r\n+            return (String) value;\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object getObjectAttachment(String key) {\r\n+        if (attachments == null) {\r\n+            return null;\r\n+        }\r\n+        return attachments.get(key);\r\n+    }\r\n+\r\n+    @Override\r\n+    @Deprecated\r\n+    public String getAttachment(String key, String defaultValue) {\r\n+        if (attachments == null) {\r\n+            return defaultValue;\r\n+        }\r\n+        Object value = attachments.get(key);\r\n+        if (value instanceof String) {\r\n+            String strValue = (String) value;\r\n+            if (StringUtils.isEmpty(strValue)) {\r\n+                return defaultValue;\r\n+            } else {\r\n+                return strValue;\r\n+            }\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    @Deprecated\r\n+    public Object getObjectAttachment(String key, Object defaultValue) {\r\n+        if (attachments == null) {\r\n+            return defaultValue;\r\n+        }\r\n+        Object value = attachments.get(key);\r\n+        if (value == null) {\r\n+            return defaultValue;\r\n+        }\r\n+        return value;\r\n+    }\r\n+\r\n+    public Class<?> getReturnType() {\r\n+        return returnType;\r\n+    }\r\n+\r\n+    public void setReturnType(Class<?> returnType) {\r\n+        this.returnType = returnType;\r\n+    }\r\n+\r\n+    public Type[] getReturnTypes() {\r\n+        return returnTypes;\r\n+    }\r\n+\r\n+    public void setReturnTypes(Type[] returnTypes) {\r\n+        this.returnTypes = returnTypes;\r\n+    }\r\n+\r\n+    public InvokeMode getInvokeMode() {\r\n+        return invokeMode;\r\n+    }\r\n+\r\n+    public void setInvokeMode(InvokeMode invokeMode) {\r\n+        this.invokeMode = invokeMode;\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return \"RpcInvocation [methodName=\" + methodName + \", parameterTypes=\"\r\n+                + Arrays.toString(parameterTypes) + \", arguments=\" + Arrays.toString(arguments)\r\n+                + \", attachments=\" + attachments + \"]\";\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/TimeoutCountDown.java", "source2": "org/apache/dubbo/rpc/TimeoutCountDown.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,90 +1,90 @@\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;\n-\n-import java.util.concurrent.TimeUnit;\n-\n-public final class TimeoutCountDown implements Comparable<TimeoutCountDown> {\n-\n-  public static TimeoutCountDown newCountDown(long timeout, TimeUnit unit) {\n-    return new TimeoutCountDown(timeout, unit);\n-  }\n-\n-  private final long timeoutInMillis;\n-  private final long deadlineInNanos;\n-  private volatile boolean expired;\n-\n-  private TimeoutCountDown(long timeout, TimeUnit unit) {\n-    timeoutInMillis = TimeUnit.MILLISECONDS.convert(timeout, unit);\n-    deadlineInNanos = System.nanoTime() + TimeUnit.NANOSECONDS.convert(timeout, unit);\n-  }\n-\n-  public long getTimeoutInMilli() {\n-    return timeoutInMillis;\n-  }\n-\n-  public boolean isExpired() {\n-    if (!expired) {\n-      if (deadlineInNanos - System.nanoTime() <= 0) {\n-        expired = true;\n-      } else {\n-        return false;\n-      }\n-    }\n-    return true;\n-  }\n-\n-  public long timeRemaining(TimeUnit unit) {\n-    final long currentNanos = System.nanoTime();\n-    if (!expired && deadlineInNanos - currentNanos <= 0) {\n-      expired = true;\n-    }\n-    return unit.convert(deadlineInNanos - currentNanos, TimeUnit.NANOSECONDS);\n-  }\n-\n-  public long elapsedMillis() {\n-    if (isExpired()) {\n-      return timeoutInMillis + TimeUnit.MILLISECONDS.convert(System.nanoTime() - deadlineInNanos, TimeUnit.NANOSECONDS);\n-    } else {\n-      return TimeUnit.MILLISECONDS.convert(deadlineInNanos - System.nanoTime(), TimeUnit.NANOSECONDS);\n-    }\n-  }\n-\n-  @Override\n-  public String toString() {\n-    long timeoutMillis = TimeUnit.MILLISECONDS.convert(deadlineInNanos, TimeUnit.NANOSECONDS);\n-    long remainingMillis = timeRemaining(TimeUnit.MILLISECONDS);\n-\n-    StringBuilder buf = new StringBuilder();\n-    buf.append(\"Total timeout value - \");\n-    buf.append(timeoutMillis);\n-    buf.append(\", times remaining - \");\n-    buf.append(remainingMillis);\n-    return buf.toString();\n-  }\n-\n-  @Override\n-  public int compareTo(TimeoutCountDown another) {\n-    long delta = this.deadlineInNanos - another.deadlineInNanos;\n-    if (delta < 0) {\n-      return -1;\n-    } else if (delta > 0) {\n-      return 1;\n-    }\n-    return 0;\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;\r\n+\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+public final class TimeoutCountDown implements Comparable<TimeoutCountDown> {\r\n+\r\n+  public static TimeoutCountDown newCountDown(long timeout, TimeUnit unit) {\r\n+    return new TimeoutCountDown(timeout, unit);\r\n+  }\r\n+\r\n+  private final long timeoutInMillis;\r\n+  private final long deadlineInNanos;\r\n+  private volatile boolean expired;\r\n+\r\n+  private TimeoutCountDown(long timeout, TimeUnit unit) {\r\n+    timeoutInMillis = TimeUnit.MILLISECONDS.convert(timeout, unit);\r\n+    deadlineInNanos = System.nanoTime() + TimeUnit.NANOSECONDS.convert(timeout, unit);\r\n+  }\r\n+\r\n+  public long getTimeoutInMilli() {\r\n+    return timeoutInMillis;\r\n+  }\r\n+\r\n+  public boolean isExpired() {\r\n+    if (!expired) {\r\n+      if (deadlineInNanos - System.nanoTime() <= 0) {\r\n+        expired = true;\r\n+      } else {\r\n+        return false;\r\n+      }\r\n+    }\r\n+    return true;\r\n+  }\r\n+\r\n+  public long timeRemaining(TimeUnit unit) {\r\n+    final long currentNanos = System.nanoTime();\r\n+    if (!expired && deadlineInNanos - currentNanos <= 0) {\r\n+      expired = true;\r\n+    }\r\n+    return unit.convert(deadlineInNanos - currentNanos, TimeUnit.NANOSECONDS);\r\n+  }\r\n+\r\n+  public long elapsedMillis() {\r\n+    if (isExpired()) {\r\n+      return timeoutInMillis + TimeUnit.MILLISECONDS.convert(System.nanoTime() - deadlineInNanos, TimeUnit.NANOSECONDS);\r\n+    } else {\r\n+      return TimeUnit.MILLISECONDS.convert(deadlineInNanos - System.nanoTime(), TimeUnit.NANOSECONDS);\r\n+    }\r\n+  }\r\n+\r\n+  @Override\r\n+  public String toString() {\r\n+    long timeoutMillis = TimeUnit.MILLISECONDS.convert(deadlineInNanos, TimeUnit.NANOSECONDS);\r\n+    long remainingMillis = timeRemaining(TimeUnit.MILLISECONDS);\r\n+\r\n+    StringBuilder buf = new StringBuilder();\r\n+    buf.append(\"Total timeout value - \");\r\n+    buf.append(timeoutMillis);\r\n+    buf.append(\", times remaining - \");\r\n+    buf.append(remainingMillis);\r\n+    return buf.toString();\r\n+  }\r\n+\r\n+  @Override\r\n+  public int compareTo(TimeoutCountDown another) {\r\n+    long delta = this.deadlineInNanos - another.deadlineInNanos;\r\n+    if (delta < 0) {\r\n+      return -1;\r\n+    } else if (delta > 0) {\r\n+      return 1;\r\n+    }\r\n+    return 0;\r\n+  }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/ZoneDetector.java", "source2": "org/apache/dubbo/rpc/ZoneDetector.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;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-\n-/**\n- * Extend and provide your own implementation if you want to distribute traffic around registries.\n- * Please, name it as 'default'\n- */\n-@SPI\n-public interface ZoneDetector {\n-\n-    String getZoneOfCurrentRequest(Invocation invocation);\n-\n-    String isZoneForcingEnabled(Invocation invocation, String zone);\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;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+/**\r\n+ * Extend and provide your own implementation if you want to distribute traffic around registries.\r\n+ * Please, name it as 'default'\r\n+ */\r\n+@SPI\r\n+public interface ZoneDetector {\r\n+\r\n+    String getZoneOfCurrentRequest(Invocation invocation);\r\n+\r\n+    String isZoneForcingEnabled(Invocation invocation, String zone);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/AccessLogFilter.java", "source2": "org/apache/dubbo/rpc/filter/AccessLogFilter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,194 +1,194 @@\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.filter;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ConcurrentHashSet;\n-import org.apache.dubbo.common.utils.ConfigUtils;\n-import org.apache.dubbo.common.utils.NamedThreadFactory;\n-import org.apache.dubbo.rpc.Filter;\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.support.AccessLogData;\n-\n-import java.io.File;\n-import java.io.FileWriter;\n-import java.io.IOException;\n-import java.text.DateFormat;\n-import java.text.SimpleDateFormat;\n-import java.util.Date;\n-import java.util.Iterator;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.Executors;\n-import java.util.concurrent.ScheduledExecutorService;\n-import java.util.concurrent.TimeUnit;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER;\n-import static org.apache.dubbo.rpc.Constants.ACCESS_LOG_KEY;\n-\n-/**\n- * Record access log for the service.\n- * <p>\n- * Logger key is <code><b>dubbo.accesslog</b></code>.\n- * In order to configure access log appear in the specified appender only, additivity need to be configured in log4j's\n- * config file, for example:\n- * <code>\n- * <pre>\n- * &lt;logger name=\"<b>dubbo.accesslog</b>\" <font color=\"red\">additivity=\"false\"</font>&gt;\n- *    &lt;level value=\"info\" /&gt;\n- *    &lt;appender-ref ref=\"foo\" /&gt;\n- * &lt;/logger&gt;\n- * </pre></code>\n- */\n-@Activate(group = PROVIDER, value = ACCESS_LOG_KEY)\n-public class AccessLogFilter implements Filter {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(AccessLogFilter.class);\n-\n-    private static final String LOG_KEY = \"dubbo.accesslog\";\n-\n-    private static final int LOG_MAX_BUFFER = 5000;\n-\n-    private static final long LOG_OUTPUT_INTERVAL = 5000;\n-\n-    private static final String FILE_DATE_FORMAT = \"yyyyMMdd\";\n-\n-    // It's safe to declare it as singleton since it runs on single thread only\n-    private static final DateFormat FILE_NAME_FORMATTER = new SimpleDateFormat(FILE_DATE_FORMAT);\n-\n-    private static final Map<String, Set<AccessLogData>> LOG_ENTRIES = new ConcurrentHashMap<>();\n-\n-    private static final ScheduledExecutorService LOG_SCHEDULED = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"Dubbo-Access-Log\", true));\n-\n-    /**\n-     * Default constructor initialize demon thread for writing into access log file with names with access log key\n-     * defined in url <b>accesslog</b>\n-     */\n-    public AccessLogFilter() {\n-        LOG_SCHEDULED.scheduleWithFixedDelay(this::writeLogToFile, LOG_OUTPUT_INTERVAL, LOG_OUTPUT_INTERVAL, TimeUnit.MILLISECONDS);\n-    }\n-\n-    /**\n-     * This method logs the access log for service method invocation call.\n-     *\n-     * @param invoker service\n-     * @param inv     Invocation service method.\n-     * @return Result from service method.\n-     * @throws RpcException\n-     */\n-    @Override\n-    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {\n-        try {\n-            String accessLogKey = invoker.getUrl().getParameter(ACCESS_LOG_KEY);\n-            if (ConfigUtils.isNotEmpty(accessLogKey)) {\n-                AccessLogData logData = AccessLogData.newLogData(); \n-                logData.buildAccessLogData(invoker, inv);\n-                log(accessLogKey, logData);\n-            }\n-        } catch (Throwable t) {\n-            logger.warn(\"Exception in AccessLogFilter of service(\" + invoker + \" -> \" + inv + \")\", t);\n-        }\n-        return invoker.invoke(inv);\n-    }\n-\n-    private void log(String accessLog, AccessLogData accessLogData) {\n-        Set<AccessLogData> logSet = LOG_ENTRIES.computeIfAbsent(accessLog, k -> new ConcurrentHashSet<>());\n-\n-        if (logSet.size() < LOG_MAX_BUFFER) {\n-            logSet.add(accessLogData);\n-        } else {\n-            logger.warn(\"AccessLog buffer is full. Do a force writing to file to clear buffer.\");\n-            //just write current logSet to file.\n-            writeLogSetToFile(accessLog, logSet);\n-            //after force writing, add accessLogData to current logSet\n-            logSet.add(accessLogData);\n-        }\n-    }\n-\n-    private void writeLogSetToFile(String accessLog, Set<AccessLogData> logSet) {\n-        try {\n-            if (ConfigUtils.isDefault(accessLog)) {\n-                processWithServiceLogger(logSet);\n-            } else {\n-                File file = new File(accessLog);\n-                createIfLogDirAbsent(file);\n-                if (logger.isDebugEnabled()) {\n-                    logger.debug(\"Append log to \" + accessLog);\n-                }\n-                renameFile(file);\n-                processWithAccessKeyLogger(logSet, file);\n-            }\n-        } catch (Exception e) {\n-            logger.error(e.getMessage(), e);\n-        }\n-    }\n-\n-    private void writeLogToFile() {\n-        if (!LOG_ENTRIES.isEmpty()) {\n-            for (Map.Entry<String, Set<AccessLogData>> entry : LOG_ENTRIES.entrySet()) {\n-                String accessLog = entry.getKey();\n-                Set<AccessLogData> logSet = entry.getValue();\n-                writeLogSetToFile(accessLog, logSet);\n-            }\n-        }\n-    }\n-\n-    private void processWithAccessKeyLogger(Set<AccessLogData> logSet, File file) throws IOException {\n-        try (FileWriter writer = new FileWriter(file, true)) {\n-            for (Iterator<AccessLogData> iterator = logSet.iterator();\n-                 iterator.hasNext();\n-                 iterator.remove()) {\n-                writer.write(iterator.next().getLogMessage());\n-                writer.write(System.getProperty(\"line.separator\"));\n-            }\n-            writer.flush();\n-        }\n-    }\n-\n-    private void processWithServiceLogger(Set<AccessLogData> logSet) {\n-        for (Iterator<AccessLogData> iterator = logSet.iterator();\n-             iterator.hasNext();\n-             iterator.remove()) {\n-            AccessLogData logData = iterator.next();\n-            LoggerFactory.getLogger(LOG_KEY + \".\" + logData.getServiceName()).info(logData.getLogMessage());\n-        }\n-    }\n-\n-    private void createIfLogDirAbsent(File file) {\n-        File dir = file.getParentFile();\n-        if (null != dir && !dir.exists()) {\n-            dir.mkdirs();\n-        }\n-    }\n-\n-    private void renameFile(File file) {\n-        if (file.exists()) {\n-            String now = FILE_NAME_FORMATTER.format(new Date());\n-            String last = FILE_NAME_FORMATTER.format(new Date(file.lastModified()));\n-            if (!now.equals(last)) {\n-                File archive = new File(file.getAbsolutePath() + \".\" + last);\n-                file.renameTo(archive);\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.filter;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ConcurrentHashSet;\r\n+import org.apache.dubbo.common.utils.ConfigUtils;\r\n+import org.apache.dubbo.common.utils.NamedThreadFactory;\r\n+import org.apache.dubbo.rpc.Filter;\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.support.AccessLogData;\r\n+\r\n+import java.io.File;\r\n+import java.io.FileWriter;\r\n+import java.io.IOException;\r\n+import java.text.DateFormat;\r\n+import java.text.SimpleDateFormat;\r\n+import java.util.Date;\r\n+import java.util.Iterator;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.Executors;\r\n+import java.util.concurrent.ScheduledExecutorService;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER;\r\n+import static org.apache.dubbo.rpc.Constants.ACCESS_LOG_KEY;\r\n+\r\n+/**\r\n+ * Record access log for the service.\r\n+ * <p>\r\n+ * Logger key is <code><b>dubbo.accesslog</b></code>.\r\n+ * In order to configure access log appear in the specified appender only, additivity need to be configured in log4j's\r\n+ * config file, for example:\r\n+ * <code>\r\n+ * <pre>\r\n+ * &lt;logger name=\"<b>dubbo.accesslog</b>\" <font color=\"red\">additivity=\"false\"</font>&gt;\r\n+ *    &lt;level value=\"info\" /&gt;\r\n+ *    &lt;appender-ref ref=\"foo\" /&gt;\r\n+ * &lt;/logger&gt;\r\n+ * </pre></code>\r\n+ */\r\n+@Activate(group = PROVIDER, value = ACCESS_LOG_KEY)\r\n+public class AccessLogFilter implements Filter {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(AccessLogFilter.class);\r\n+\r\n+    private static final String LOG_KEY = \"dubbo.accesslog\";\r\n+\r\n+    private static final int LOG_MAX_BUFFER = 5000;\r\n+\r\n+    private static final long LOG_OUTPUT_INTERVAL = 5000;\r\n+\r\n+    private static final String FILE_DATE_FORMAT = \"yyyyMMdd\";\r\n+\r\n+    // It's safe to declare it as singleton since it runs on single thread only\r\n+    private static final DateFormat FILE_NAME_FORMATTER = new SimpleDateFormat(FILE_DATE_FORMAT);\r\n+\r\n+    private static final Map<String, Set<AccessLogData>> LOG_ENTRIES = new ConcurrentHashMap<>();\r\n+\r\n+    private static final ScheduledExecutorService LOG_SCHEDULED = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory(\"Dubbo-Access-Log\", true));\r\n+\r\n+    /**\r\n+     * Default constructor initialize demon thread for writing into access log file with names with access log key\r\n+     * defined in url <b>accesslog</b>\r\n+     */\r\n+    public AccessLogFilter() {\r\n+        LOG_SCHEDULED.scheduleWithFixedDelay(this::writeLogToFile, LOG_OUTPUT_INTERVAL, LOG_OUTPUT_INTERVAL, TimeUnit.MILLISECONDS);\r\n+    }\r\n+\r\n+    /**\r\n+     * This method logs the access log for service method invocation call.\r\n+     *\r\n+     * @param invoker service\r\n+     * @param inv     Invocation service method.\r\n+     * @return Result from service method.\r\n+     * @throws RpcException\r\n+     */\r\n+    @Override\r\n+    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {\r\n+        try {\r\n+            String accessLogKey = invoker.getUrl().getParameter(ACCESS_LOG_KEY);\r\n+            if (ConfigUtils.isNotEmpty(accessLogKey)) {\r\n+                AccessLogData logData = AccessLogData.newLogData(); \r\n+                logData.buildAccessLogData(invoker, inv);\r\n+                log(accessLogKey, logData);\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            logger.warn(\"Exception in AccessLogFilter of service(\" + invoker + \" -> \" + inv + \")\", t);\r\n+        }\r\n+        return invoker.invoke(inv);\r\n+    }\r\n+\r\n+    private void log(String accessLog, AccessLogData accessLogData) {\r\n+        Set<AccessLogData> logSet = LOG_ENTRIES.computeIfAbsent(accessLog, k -> new ConcurrentHashSet<>());\r\n+\r\n+        if (logSet.size() < LOG_MAX_BUFFER) {\r\n+            logSet.add(accessLogData);\r\n+        } else {\r\n+            logger.warn(\"AccessLog buffer is full. Do a force writing to file to clear buffer.\");\r\n+            //just write current logSet to file.\r\n+            writeLogSetToFile(accessLog, logSet);\r\n+            //after force writing, add accessLogData to current logSet\r\n+            logSet.add(accessLogData);\r\n+        }\r\n+    }\r\n+\r\n+    private void writeLogSetToFile(String accessLog, Set<AccessLogData> logSet) {\r\n+        try {\r\n+            if (ConfigUtils.isDefault(accessLog)) {\r\n+                processWithServiceLogger(logSet);\r\n+            } else {\r\n+                File file = new File(accessLog);\r\n+                createIfLogDirAbsent(file);\r\n+                if (logger.isDebugEnabled()) {\r\n+                    logger.debug(\"Append log to \" + accessLog);\r\n+                }\r\n+                renameFile(file);\r\n+                processWithAccessKeyLogger(logSet, file);\r\n+            }\r\n+        } catch (Exception e) {\r\n+            logger.error(e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+    private void writeLogToFile() {\r\n+        if (!LOG_ENTRIES.isEmpty()) {\r\n+            for (Map.Entry<String, Set<AccessLogData>> entry : LOG_ENTRIES.entrySet()) {\r\n+                String accessLog = entry.getKey();\r\n+                Set<AccessLogData> logSet = entry.getValue();\r\n+                writeLogSetToFile(accessLog, logSet);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private void processWithAccessKeyLogger(Set<AccessLogData> logSet, File file) throws IOException {\r\n+        try (FileWriter writer = new FileWriter(file, true)) {\r\n+            for (Iterator<AccessLogData> iterator = logSet.iterator();\r\n+                 iterator.hasNext();\r\n+                 iterator.remove()) {\r\n+                writer.write(iterator.next().getLogMessage());\r\n+                writer.write(System.getProperty(\"line.separator\"));\r\n+            }\r\n+            writer.flush();\r\n+        }\r\n+    }\r\n+\r\n+    private void processWithServiceLogger(Set<AccessLogData> logSet) {\r\n+        for (Iterator<AccessLogData> iterator = logSet.iterator();\r\n+             iterator.hasNext();\r\n+             iterator.remove()) {\r\n+            AccessLogData logData = iterator.next();\r\n+            LoggerFactory.getLogger(LOG_KEY + \".\" + logData.getServiceName()).info(logData.getLogMessage());\r\n+        }\r\n+    }\r\n+\r\n+    private void createIfLogDirAbsent(File file) {\r\n+        File dir = file.getParentFile();\r\n+        if (null != dir && !dir.exists()) {\r\n+            dir.mkdirs();\r\n+        }\r\n+    }\r\n+\r\n+    private void renameFile(File file) {\r\n+        if (file.exists()) {\r\n+            String now = FILE_NAME_FORMATTER.format(new Date());\r\n+            String last = FILE_NAME_FORMATTER.format(new Date(file.lastModified()));\r\n+            if (!now.equals(last)) {\r\n+                File archive = new File(file.getAbsolutePath() + \".\" + last);\r\n+                file.renameTo(archive);\r\n+            }\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/ConsumerContextFilter.java", "source2": "org/apache/dubbo/rpc/filter/ConsumerContextFilter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,72 +1,72 @@\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.filter;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.NetUtils;\n-import org.apache.dubbo.rpc.AsyncRpcResult;\n-import org.apache.dubbo.rpc.Filter;\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.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.TimeoutCountDown;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;\n-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIME_COUNTDOWN_KEY;\n-\n-/**\n- * ConsumerContextFilter set current RpcContext with invoker,invocation, local host, remote host and port\n- * for consumer invoker.It does it to make the requires info available to execution thread's RpcContext.\n- *\n- * @see org.apache.dubbo.rpc.Filter\n- * @see RpcContext\n- */\n-@Activate(group = CONSUMER, order = -10000)\n-public class ConsumerContextFilter implements Filter {\n-\n-    @Override\n-    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\n-        RpcContext context = RpcContext.getContext();\n-        context.setInvoker(invoker)\n-                .setInvocation(invocation)\n-                .setLocalAddress(NetUtils.getLocalHost(), 0)\n-                .setRemoteAddress(invoker.getUrl().getHost(), invoker.getUrl().getPort())\n-                .setRemoteApplicationName(invoker.getUrl().getParameter(REMOTE_APPLICATION_KEY))\n-                .setAttachment(REMOTE_APPLICATION_KEY, invoker.getUrl().getParameter(APPLICATION_KEY));\n-        if (invocation instanceof RpcInvocation) {\n-            ((RpcInvocation) invocation).setInvoker(invoker);\n-        }\n-\n-        // pass default timeout set by end user (ReferenceConfig)\n-        Object countDown = context.get(TIME_COUNTDOWN_KEY);\n-        if (countDown != null) {\n-            TimeoutCountDown timeoutCountDown = (TimeoutCountDown) countDown;\n-            if (timeoutCountDown.isExpired()) {\n-                return AsyncRpcResult.newDefaultAsyncResult(new RpcException(RpcException.TIMEOUT_TERMINATE,\n-                        \"No time left for making the following call: \" + invocation.getServiceName() + \".\"\n-                                + invocation.getMethodName() + \", terminate directly.\"), invocation);\n-            }\n-        }\n-        return invoker.invoke(invocation);\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.filter;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.NetUtils;\r\n+import org.apache.dubbo.rpc.AsyncRpcResult;\r\n+import org.apache.dubbo.rpc.Filter;\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.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.TimeoutCountDown;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIME_COUNTDOWN_KEY;\r\n+\r\n+/**\r\n+ * ConsumerContextFilter set current RpcContext with invoker,invocation, local host, remote host and port\r\n+ * for consumer invoker.It does it to make the requires info available to execution thread's RpcContext.\r\n+ *\r\n+ * @see org.apache.dubbo.rpc.Filter\r\n+ * @see RpcContext\r\n+ */\r\n+@Activate(group = CONSUMER, order = -10000)\r\n+public class ConsumerContextFilter implements Filter {\r\n+\r\n+    @Override\r\n+    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\r\n+        RpcContext context = RpcContext.getContext();\r\n+        context.setInvoker(invoker)\r\n+                .setInvocation(invocation)\r\n+                .setLocalAddress(NetUtils.getLocalHost(), 0)\r\n+                .setRemoteAddress(invoker.getUrl().getHost(), invoker.getUrl().getPort())\r\n+                .setRemoteApplicationName(invoker.getUrl().getParameter(REMOTE_APPLICATION_KEY))\r\n+                .setAttachment(REMOTE_APPLICATION_KEY, invoker.getUrl().getParameter(APPLICATION_KEY));\r\n+        if (invocation instanceof RpcInvocation) {\r\n+            ((RpcInvocation) invocation).setInvoker(invoker);\r\n+        }\r\n+\r\n+        // pass default timeout set by end user (ReferenceConfig)\r\n+        Object countDown = context.get(TIME_COUNTDOWN_KEY);\r\n+        if (countDown != null) {\r\n+            TimeoutCountDown timeoutCountDown = (TimeoutCountDown) countDown;\r\n+            if (timeoutCountDown.isExpired()) {\r\n+                return AsyncRpcResult.newDefaultAsyncResult(new RpcException(RpcException.TIMEOUT_TERMINATE,\r\n+                        \"No time left for making the following call: \" + invocation.getServiceName() + \".\"\r\n+                                + invocation.getMethodName() + \", terminate directly.\"), invocation);\r\n+            }\r\n+        }\r\n+        return invoker.invoke(invocation);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/ContextFilter.java", "source2": "org/apache/dubbo/rpc/filter/ContextFilter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,148 +1,148 @@\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.filter;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.Filter;\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.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.TimeoutCountDown;\n-import org.apache.dubbo.rpc.support.RpcUtils;\n-\n-import java.util.HashMap;\n-import java.util.HashSet;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.concurrent.TimeUnit;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;\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.PROVIDER;\n-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_APPLICATION_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_ATTACHMENT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIME_COUNTDOWN_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\n-import static org.apache.dubbo.rpc.Constants.FORCE_USE_TAG;\n-import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\n-\n-\n-/**\n- * ContextFilter set the provider RpcContext with invoker, invocation, local port it is using and host for\n- * current execution thread.\n- *\n- * @see RpcContext\n- */\n-@Activate(group = PROVIDER, order = -10000)\n-public class ContextFilter implements Filter, Filter.Listener {\n-\n-    private static final String TAG_KEY = \"dubbo.tag\";\n-\n-    private static final Set<String> UNLOADING_KEYS;\n-\n-    static {\n-        UNLOADING_KEYS = new HashSet<>(128);\n-        UNLOADING_KEYS.add(PATH_KEY);\n-        UNLOADING_KEYS.add(INTERFACE_KEY);\n-        UNLOADING_KEYS.add(GROUP_KEY);\n-        UNLOADING_KEYS.add(VERSION_KEY);\n-        UNLOADING_KEYS.add(DUBBO_VERSION_KEY);\n-        UNLOADING_KEYS.add(TOKEN_KEY);\n-        UNLOADING_KEYS.add(TIMEOUT_KEY);\n-        UNLOADING_KEYS.add(TIMEOUT_ATTACHMENT_KEY);\n-\n-        // Remove async property to avoid being passed to the following invoke chain.\n-        UNLOADING_KEYS.add(ASYNC_KEY);\n-        UNLOADING_KEYS.add(TAG_KEY);\n-        UNLOADING_KEYS.add(FORCE_USE_TAG);\n-    }\n-\n-    @Override\n-    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\n-        Map<String, Object> attachments = invocation.getObjectAttachments();\n-        if (attachments != null) {\n-            Map<String, Object> newAttach = new HashMap<>(attachments.size());\n-            for (Map.Entry<String, Object> entry : attachments.entrySet()) {\n-                String key = entry.getKey();\n-                if (!UNLOADING_KEYS.contains(key)) {\n-                    newAttach.put(key, entry.getValue());\n-                }\n-            }\n-            attachments = newAttach;\n-        }\n-\n-        RpcContext context = RpcContext.getContext();\n-        context.setInvoker(invoker)\n-                .setInvocation(invocation)\n-//                .setAttachments(attachments)  // merged from dubbox\n-                .setLocalAddress(invoker.getUrl().getHost(), invoker.getUrl().getPort());\n-        String remoteApplication = (String) invocation.getAttachment(REMOTE_APPLICATION_KEY);\n-        if (StringUtils.isNotEmpty(remoteApplication)) {\n-            context.setRemoteApplicationName(remoteApplication);\n-        } else {\n-            context.setRemoteApplicationName((String) context.getAttachment(REMOTE_APPLICATION_KEY));\n-        }\n-\n-        long timeout = RpcUtils.getTimeout(invocation, -1);\n-        if (timeout != -1) {\n-            context.set(TIME_COUNTDOWN_KEY, TimeoutCountDown.newCountDown(timeout, TimeUnit.MILLISECONDS));\n-        }\n-\n-        // merged from dubbox\n-        // we may already added some attachments into RpcContext before this filter (e.g. in rest protocol)\n-        if (attachments != null) {\n-            if (context.getObjectAttachments() != null) {\n-                context.getObjectAttachments().putAll(attachments);\n-            } else {\n-                context.setObjectAttachments(attachments);\n-            }\n-        }\n-\n-        if (invocation instanceof RpcInvocation) {\n-            ((RpcInvocation) invocation).setInvoker(invoker);\n-        }\n-\n-        try {\n-            context.clearAfterEachInvoke(false);\n-            return invoker.invoke(invocation);\n-        } finally {\n-            context.clearAfterEachInvoke(true);\n-            // IMPORTANT! For async scenario, we must remove context from current thread, so we always create a new RpcContext for the next invoke for the same thread.\n-            RpcContext.removeContext(true);\n-            RpcContext.removeServerContext();\n-        }\n-    }\n-\n-    @Override\n-    public void onResponse(Result appResponse, Invoker<?> invoker, Invocation invocation) {\n-        // pass attachments to result\n-        appResponse.addObjectAttachments(RpcContext.getServerContext().getObjectAttachments());\n-    }\n-\n-    @Override\n-    public void onError(Throwable t, Invoker<?> invoker, Invocation invocation) {\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.filter;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.Filter;\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.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.TimeoutCountDown;\r\n+import org.apache.dubbo.rpc.support.RpcUtils;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.HashSet;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_VERSION_KEY;\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.PROVIDER;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_APPLICATION_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_ATTACHMENT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIME_COUNTDOWN_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.FORCE_USE_TAG;\r\n+import static org.apache.dubbo.rpc.Constants.TOKEN_KEY;\r\n+\r\n+\r\n+/**\r\n+ * ContextFilter set the provider RpcContext with invoker, invocation, local port it is using and host for\r\n+ * current execution thread.\r\n+ *\r\n+ * @see RpcContext\r\n+ */\r\n+@Activate(group = PROVIDER, order = -10000)\r\n+public class ContextFilter implements Filter, Filter.Listener {\r\n+\r\n+    private static final String TAG_KEY = \"dubbo.tag\";\r\n+\r\n+    private static final Set<String> UNLOADING_KEYS;\r\n+\r\n+    static {\r\n+        UNLOADING_KEYS = new HashSet<>(128);\r\n+        UNLOADING_KEYS.add(PATH_KEY);\r\n+        UNLOADING_KEYS.add(INTERFACE_KEY);\r\n+        UNLOADING_KEYS.add(GROUP_KEY);\r\n+        UNLOADING_KEYS.add(VERSION_KEY);\r\n+        UNLOADING_KEYS.add(DUBBO_VERSION_KEY);\r\n+        UNLOADING_KEYS.add(TOKEN_KEY);\r\n+        UNLOADING_KEYS.add(TIMEOUT_KEY);\r\n+        UNLOADING_KEYS.add(TIMEOUT_ATTACHMENT_KEY);\r\n+\r\n+        // Remove async property to avoid being passed to the following invoke chain.\r\n+        UNLOADING_KEYS.add(ASYNC_KEY);\r\n+        UNLOADING_KEYS.add(TAG_KEY);\r\n+        UNLOADING_KEYS.add(FORCE_USE_TAG);\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\r\n+        Map<String, Object> attachments = invocation.getObjectAttachments();\r\n+        if (attachments != null) {\r\n+            Map<String, Object> newAttach = new HashMap<>(attachments.size());\r\n+            for (Map.Entry<String, Object> entry : attachments.entrySet()) {\r\n+                String key = entry.getKey();\r\n+                if (!UNLOADING_KEYS.contains(key)) {\r\n+                    newAttach.put(key, entry.getValue());\r\n+                }\r\n+            }\r\n+            attachments = newAttach;\r\n+        }\r\n+\r\n+        RpcContext context = RpcContext.getContext();\r\n+        context.setInvoker(invoker)\r\n+                .setInvocation(invocation)\r\n+//                .setAttachments(attachments)  // merged from dubbox\r\n+                .setLocalAddress(invoker.getUrl().getHost(), invoker.getUrl().getPort());\r\n+        String remoteApplication = (String) invocation.getAttachment(REMOTE_APPLICATION_KEY);\r\n+        if (StringUtils.isNotEmpty(remoteApplication)) {\r\n+            context.setRemoteApplicationName(remoteApplication);\r\n+        } else {\r\n+            context.setRemoteApplicationName((String) context.getAttachment(REMOTE_APPLICATION_KEY));\r\n+        }\r\n+\r\n+        long timeout = RpcUtils.getTimeout(invocation, -1);\r\n+        if (timeout != -1) {\r\n+            context.set(TIME_COUNTDOWN_KEY, TimeoutCountDown.newCountDown(timeout, TimeUnit.MILLISECONDS));\r\n+        }\r\n+\r\n+        // merged from dubbox\r\n+        // we may already added some attachments into RpcContext before this filter (e.g. in rest protocol)\r\n+        if (attachments != null) {\r\n+            if (context.getObjectAttachments() != null) {\r\n+                context.getObjectAttachments().putAll(attachments);\r\n+            } else {\r\n+                context.setObjectAttachments(attachments);\r\n+            }\r\n+        }\r\n+\r\n+        if (invocation instanceof RpcInvocation) {\r\n+            ((RpcInvocation) invocation).setInvoker(invoker);\r\n+        }\r\n+\r\n+        try {\r\n+            context.clearAfterEachInvoke(false);\r\n+            return invoker.invoke(invocation);\r\n+        } finally {\r\n+            context.clearAfterEachInvoke(true);\r\n+            // IMPORTANT! For async scenario, we must remove context from current thread, so we always create a new RpcContext for the next invoke for the same thread.\r\n+            RpcContext.removeContext(true);\r\n+            RpcContext.removeServerContext();\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void onResponse(Result appResponse, Invoker<?> invoker, Invocation invocation) {\r\n+        // pass attachments to result\r\n+        appResponse.addObjectAttachments(RpcContext.getServerContext().getObjectAttachments());\r\n+    }\r\n+\r\n+    @Override\r\n+    public void onError(Throwable t, Invoker<?> invoker, Invocation invocation) {\r\n+\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/GenericFilter.java", "source2": "org/apache/dubbo/rpc/filter/GenericFilter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,237 +1,237 @@\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.filter;\n-\n-import org.apache.dubbo.common.beanutil.JavaBeanAccessor;\n-import org.apache.dubbo.common.beanutil.JavaBeanDescriptor;\n-import org.apache.dubbo.common.beanutil.JavaBeanSerializeUtil;\n-import org.apache.dubbo.common.config.Configuration;\n-import org.apache.dubbo.common.constants.CommonConstants;\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.io.UnsafeByteArrayInputStream;\n-import org.apache.dubbo.common.io.UnsafeByteArrayOutputStream;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.serialize.Serialization;\n-import org.apache.dubbo.common.utils.PojoUtils;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.Filter;\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.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.service.GenericException;\n-import org.apache.dubbo.rpc.service.GenericService;\n-import org.apache.dubbo.rpc.support.ProtocolUtils;\n-\n-import java.io.IOException;\n-import java.lang.reflect.Method;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_BEAN;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_NATIVE_JAVA;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_PROTOBUF;\n-import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;\n-\n-/**\n- * GenericInvokerFilter.\n- */\n-@Activate(group = CommonConstants.PROVIDER, order = -20000)\n-public class GenericFilter implements Filter, Filter.Listener {\n-    private static final Logger logger = LoggerFactory.getLogger(GenericFilter.class);\n-\n-    @Override\n-    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {\n-        if ((inv.getMethodName().equals($INVOKE) || inv.getMethodName().equals($INVOKE_ASYNC))\n-                && inv.getArguments() != null\n-                && inv.getArguments().length == 3\n-                && !GenericService.class.isAssignableFrom(invoker.getInterface())) {\n-            String name = ((String) inv.getArguments()[0]).trim();\n-            String[] types = (String[]) inv.getArguments()[1];\n-            Object[] args = (Object[]) inv.getArguments()[2];\n-            try {\n-                Method method = ReflectUtils.findMethodByMethodSignature(invoker.getInterface(), name, types);\n-                Class<?>[] params = method.getParameterTypes();\n-                if (args == null) {\n-                    args = new Object[params.length];\n-                }\n-\n-                if (types == null) {\n-                    types = new String[params.length];\n-                }\n-\n-                if (args.length != types.length) {\n-                    throw new RpcException(\"GenericFilter#invoke args.length != types.length, please check your \"\n-                            + \"params\");\n-                }\n-                String generic = inv.getAttachment(GENERIC_KEY);\n-\n-                if (StringUtils.isBlank(generic)) {\n-                    generic = RpcContext.getContext().getAttachment(GENERIC_KEY);\n-                }\n-\n-                if (StringUtils.isEmpty(generic)\n-                        || ProtocolUtils.isDefaultGenericSerialization(generic)\n-                        || ProtocolUtils.isGenericReturnRawResult(generic)) {\n-                    args = PojoUtils.realize(args, params, method.getGenericParameterTypes());\n-                } else if (ProtocolUtils.isJavaGenericSerialization(generic)) {\n-                    Configuration configuration = ApplicationModel.getEnvironment().getConfiguration();\n-                    if (!configuration.getBoolean(CommonConstants.ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE, false)) {\n-                        String notice = \"Trigger the safety barrier! \" +\n-                                \"Native Java Serializer is not allowed by default.\" +\n-                                \"This means currently maybe being attacking by others. \" +\n-                                \"If you are sure this is a mistake, \" +\n-                                \"please set `\" + CommonConstants.ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE + \"` enable in configuration! \" +\n-                                \"Before doing so, please make sure you have configure JEP290 to prevent serialization attack.\";\n-                        logger.error(notice);\n-                        throw new RpcException(new IllegalStateException(notice));\n-                    }\n-\n-                    for (int i = 0; i < args.length; i++) {\n-                        if (byte[].class == args[i].getClass()) {\n-                            try (UnsafeByteArrayInputStream is = new UnsafeByteArrayInputStream((byte[]) args[i])) {\n-                                args[i] = ExtensionLoader.getExtensionLoader(Serialization.class)\n-                                        .getExtension(GENERIC_SERIALIZATION_NATIVE_JAVA)\n-                                        .deserialize(null, is).readObject();\n-                            } catch (Exception e) {\n-                                throw new RpcException(\"Deserialize argument [\" + (i + 1) + \"] failed.\", e);\n-                            }\n-                        } else {\n-                            throw new RpcException(\n-                                    \"Generic serialization [\" +\n-                                            GENERIC_SERIALIZATION_NATIVE_JAVA +\n-                                            \"] only support message type \" +\n-                                            byte[].class +\n-                                            \" and your message type is \" +\n-                                            args[i].getClass());\n-                        }\n-                    }\n-                } else if (ProtocolUtils.isBeanGenericSerialization(generic)) {\n-                    for (int i = 0; i < args.length; i++) {\n-                        if (args[i] instanceof JavaBeanDescriptor) {\n-                            args[i] = JavaBeanSerializeUtil.deserialize((JavaBeanDescriptor) args[i]);\n-                        } else {\n-                            throw new RpcException(\n-                                    \"Generic serialization [\" +\n-                                            GENERIC_SERIALIZATION_BEAN +\n-                                            \"] only support message type \" +\n-                                            JavaBeanDescriptor.class.getName() +\n-                                            \" and your message type is \" +\n-                                            args[i].getClass().getName());\n-                        }\n-                    }\n-                } else if (ProtocolUtils.isProtobufGenericSerialization(generic)) {\n-                    // as proto3 only accept one protobuf parameter\n-                    if (args.length == 1 && args[0] instanceof String) {\n-                        try (UnsafeByteArrayInputStream is =\n-                                     new UnsafeByteArrayInputStream(((String) args[0]).getBytes())) {\n-                            args[0] = ExtensionLoader.getExtensionLoader(Serialization.class)\n-                                    .getExtension(GENERIC_SERIALIZATION_PROTOBUF)\n-                                    .deserialize(null, is).readObject(method.getParameterTypes()[0]);\n-                        } catch (Exception e) {\n-                            throw new RpcException(\"Deserialize argument failed.\", e);\n-                        }\n-                    } else {\n-                        throw new RpcException(\n-                                \"Generic serialization [\" +\n-                                        GENERIC_SERIALIZATION_PROTOBUF +\n-                                        \"] only support one \" + String.class.getName() +\n-                                        \" argument and your message size is \" +\n-                                        args.length + \" and type is\" +\n-                                        args[0].getClass().getName());\n-                    }\n-                }\n-\n-                RpcInvocation rpcInvocation = new RpcInvocation(method, invoker.getInterface().getName(), invoker.getUrl().getProtocolServiceKey(), args, inv.getObjectAttachments(), inv.getAttributes());\n-                rpcInvocation.setInvoker(inv.getInvoker());\n-                rpcInvocation.setTargetServiceUniqueName(inv.getTargetServiceUniqueName());\n-\n-                return invoker.invoke(rpcInvocation);\n-            } catch (NoSuchMethodException | ClassNotFoundException e) {\n-                throw new RpcException(e.getMessage(), e);\n-            }\n-        }\n-        return invoker.invoke(inv);\n-    }\n-\n-    @Override\n-    public void onResponse(Result appResponse, Invoker<?> invoker, Invocation inv) {\n-        if ((inv.getMethodName().equals($INVOKE) || inv.getMethodName().equals($INVOKE_ASYNC))\n-                && inv.getArguments() != null\n-                && inv.getArguments().length == 3\n-                && !GenericService.class.isAssignableFrom(invoker.getInterface())) {\n-\n-            String generic = inv.getAttachment(GENERIC_KEY);\n-            if (StringUtils.isBlank(generic)) {\n-                generic = RpcContext.getContext().getAttachment(GENERIC_KEY);\n-            }\n-\n-            if (appResponse.hasException()) {\n-                Throwable appException = appResponse.getException();\n-                if (appException instanceof GenericException) {\n-                    GenericException tmp = (GenericException) appException;\n-                    appException = new com.alibaba.dubbo.rpc.service.GenericException(tmp.getExceptionClass(), tmp.getExceptionMessage());\n-                }\n-                if (!(appException instanceof com.alibaba.dubbo.rpc.service.GenericException)) {\n-                    appException = new com.alibaba.dubbo.rpc.service.GenericException(appException);\n-                }\n-                appResponse.setException(appException);\n-            }\n-            if (ProtocolUtils.isJavaGenericSerialization(generic)) {\n-                try {\n-                    UnsafeByteArrayOutputStream os = new UnsafeByteArrayOutputStream(512);\n-                    ExtensionLoader.getExtensionLoader(Serialization.class).getExtension(GENERIC_SERIALIZATION_NATIVE_JAVA).serialize(null, os).writeObject(appResponse.getValue());\n-                    appResponse.setValue(os.toByteArray());\n-                } catch (IOException e) {\n-                    throw new RpcException(\n-                            \"Generic serialization [\" +\n-                                    GENERIC_SERIALIZATION_NATIVE_JAVA +\n-                                    \"] serialize result failed.\", e);\n-                }\n-            } else if (ProtocolUtils.isBeanGenericSerialization(generic)) {\n-                appResponse.setValue(JavaBeanSerializeUtil.serialize(appResponse.getValue(), JavaBeanAccessor.METHOD));\n-            } else if (ProtocolUtils.isProtobufGenericSerialization(generic)) {\n-                try {\n-                    UnsafeByteArrayOutputStream os = new UnsafeByteArrayOutputStream(512);\n-                    ExtensionLoader.getExtensionLoader(Serialization.class)\n-                            .getExtension(GENERIC_SERIALIZATION_PROTOBUF)\n-                            .serialize(null, os).writeObject(appResponse.getValue());\n-                    appResponse.setValue(os.toString());\n-                } catch (IOException e) {\n-                    throw new RpcException(\"Generic serialization [\" +\n-                            GENERIC_SERIALIZATION_PROTOBUF +\n-                            \"] serialize result failed.\", e);\n-                }\n-            } else if (ProtocolUtils.isGenericReturnRawResult(generic)) {\n-                return;\n-            } else {\n-                appResponse.setValue(PojoUtils.generalize(appResponse.getValue()));\n-            }\n-        }\n-    }\n-\n-    @Override\n-    public void onError(Throwable t, Invoker<?> invoker, Invocation invocation) {\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.filter;\r\n+\r\n+import org.apache.dubbo.common.beanutil.JavaBeanAccessor;\r\n+import org.apache.dubbo.common.beanutil.JavaBeanDescriptor;\r\n+import org.apache.dubbo.common.beanutil.JavaBeanSerializeUtil;\r\n+import org.apache.dubbo.common.config.Configuration;\r\n+import org.apache.dubbo.common.constants.CommonConstants;\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.io.UnsafeByteArrayInputStream;\r\n+import org.apache.dubbo.common.io.UnsafeByteArrayOutputStream;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.serialize.Serialization;\r\n+import org.apache.dubbo.common.utils.PojoUtils;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.Filter;\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.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.service.GenericException;\r\n+import org.apache.dubbo.rpc.service.GenericService;\r\n+import org.apache.dubbo.rpc.support.ProtocolUtils;\r\n+\r\n+import java.io.IOException;\r\n+import java.lang.reflect.Method;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_BEAN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_NATIVE_JAVA;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_SERIALIZATION_PROTOBUF;\r\n+import static org.apache.dubbo.rpc.Constants.GENERIC_KEY;\r\n+\r\n+/**\r\n+ * GenericInvokerFilter.\r\n+ */\r\n+@Activate(group = CommonConstants.PROVIDER, order = -20000)\r\n+public class GenericFilter implements Filter, Filter.Listener {\r\n+    private static final Logger logger = LoggerFactory.getLogger(GenericFilter.class);\r\n+\r\n+    @Override\r\n+    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {\r\n+        if ((inv.getMethodName().equals($INVOKE) || inv.getMethodName().equals($INVOKE_ASYNC))\r\n+                && inv.getArguments() != null\r\n+                && inv.getArguments().length == 3\r\n+                && !GenericService.class.isAssignableFrom(invoker.getInterface())) {\r\n+            String name = ((String) inv.getArguments()[0]).trim();\r\n+            String[] types = (String[]) inv.getArguments()[1];\r\n+            Object[] args = (Object[]) inv.getArguments()[2];\r\n+            try {\r\n+                Method method = ReflectUtils.findMethodByMethodSignature(invoker.getInterface(), name, types);\r\n+                Class<?>[] params = method.getParameterTypes();\r\n+                if (args == null) {\r\n+                    args = new Object[params.length];\r\n+                }\r\n+\r\n+                if (types == null) {\r\n+                    types = new String[params.length];\r\n+                }\r\n+\r\n+                if (args.length != types.length) {\r\n+                    throw new RpcException(\"GenericFilter#invoke args.length != types.length, please check your \"\r\n+                            + \"params\");\r\n+                }\r\n+                String generic = inv.getAttachment(GENERIC_KEY);\r\n+\r\n+                if (StringUtils.isBlank(generic)) {\r\n+                    generic = RpcContext.getContext().getAttachment(GENERIC_KEY);\r\n+                }\r\n+\r\n+                if (StringUtils.isEmpty(generic)\r\n+                        || ProtocolUtils.isDefaultGenericSerialization(generic)\r\n+                        || ProtocolUtils.isGenericReturnRawResult(generic)) {\r\n+                    args = PojoUtils.realize(args, params, method.getGenericParameterTypes());\r\n+                } else if (ProtocolUtils.isJavaGenericSerialization(generic)) {\r\n+                    Configuration configuration = ApplicationModel.getEnvironment().getConfiguration();\r\n+                    if (!configuration.getBoolean(CommonConstants.ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE, false)) {\r\n+                        String notice = \"Trigger the safety barrier! \" +\r\n+                                \"Native Java Serializer is not allowed by default.\" +\r\n+                                \"This means currently maybe being attacking by others. \" +\r\n+                                \"If you are sure this is a mistake, \" +\r\n+                                \"please set `\" + CommonConstants.ENABLE_NATIVE_JAVA_GENERIC_SERIALIZE + \"` enable in configuration! \" +\r\n+                                \"Before doing so, please make sure you have configure JEP290 to prevent serialization attack.\";\r\n+                        logger.error(notice);\r\n+                        throw new RpcException(new IllegalStateException(notice));\r\n+                    }\r\n+\r\n+                    for (int i = 0; i < args.length; i++) {\r\n+                        if (byte[].class == args[i].getClass()) {\r\n+                            try (UnsafeByteArrayInputStream is = new UnsafeByteArrayInputStream((byte[]) args[i])) {\r\n+                                args[i] = ExtensionLoader.getExtensionLoader(Serialization.class)\r\n+                                        .getExtension(GENERIC_SERIALIZATION_NATIVE_JAVA)\r\n+                                        .deserialize(null, is).readObject();\r\n+                            } catch (Exception e) {\r\n+                                throw new RpcException(\"Deserialize argument [\" + (i + 1) + \"] failed.\", e);\r\n+                            }\r\n+                        } else {\r\n+                            throw new RpcException(\r\n+                                    \"Generic serialization [\" +\r\n+                                            GENERIC_SERIALIZATION_NATIVE_JAVA +\r\n+                                            \"] only support message type \" +\r\n+                                            byte[].class +\r\n+                                            \" and your message type is \" +\r\n+                                            args[i].getClass());\r\n+                        }\r\n+                    }\r\n+                } else if (ProtocolUtils.isBeanGenericSerialization(generic)) {\r\n+                    for (int i = 0; i < args.length; i++) {\r\n+                        if (args[i] instanceof JavaBeanDescriptor) {\r\n+                            args[i] = JavaBeanSerializeUtil.deserialize((JavaBeanDescriptor) args[i]);\r\n+                        } else {\r\n+                            throw new RpcException(\r\n+                                    \"Generic serialization [\" +\r\n+                                            GENERIC_SERIALIZATION_BEAN +\r\n+                                            \"] only support message type \" +\r\n+                                            JavaBeanDescriptor.class.getName() +\r\n+                                            \" and your message type is \" +\r\n+                                            args[i].getClass().getName());\r\n+                        }\r\n+                    }\r\n+                } else if (ProtocolUtils.isProtobufGenericSerialization(generic)) {\r\n+                    // as proto3 only accept one protobuf parameter\r\n+                    if (args.length == 1 && args[0] instanceof String) {\r\n+                        try (UnsafeByteArrayInputStream is =\r\n+                                     new UnsafeByteArrayInputStream(((String) args[0]).getBytes())) {\r\n+                            args[0] = ExtensionLoader.getExtensionLoader(Serialization.class)\r\n+                                    .getExtension(GENERIC_SERIALIZATION_PROTOBUF)\r\n+                                    .deserialize(null, is).readObject(method.getParameterTypes()[0]);\r\n+                        } catch (Exception e) {\r\n+                            throw new RpcException(\"Deserialize argument failed.\", e);\r\n+                        }\r\n+                    } else {\r\n+                        throw new RpcException(\r\n+                                \"Generic serialization [\" +\r\n+                                        GENERIC_SERIALIZATION_PROTOBUF +\r\n+                                        \"] only support one \" + String.class.getName() +\r\n+                                        \" argument and your message size is \" +\r\n+                                        args.length + \" and type is\" +\r\n+                                        args[0].getClass().getName());\r\n+                    }\r\n+                }\r\n+\r\n+                RpcInvocation rpcInvocation = new RpcInvocation(method, invoker.getInterface().getName(), invoker.getUrl().getProtocolServiceKey(), args, inv.getObjectAttachments(), inv.getAttributes());\r\n+                rpcInvocation.setInvoker(inv.getInvoker());\r\n+                rpcInvocation.setTargetServiceUniqueName(inv.getTargetServiceUniqueName());\r\n+\r\n+                return invoker.invoke(rpcInvocation);\r\n+            } catch (NoSuchMethodException | ClassNotFoundException e) {\r\n+                throw new RpcException(e.getMessage(), e);\r\n+            }\r\n+        }\r\n+        return invoker.invoke(inv);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void onResponse(Result appResponse, Invoker<?> invoker, Invocation inv) {\r\n+        if ((inv.getMethodName().equals($INVOKE) || inv.getMethodName().equals($INVOKE_ASYNC))\r\n+                && inv.getArguments() != null\r\n+                && inv.getArguments().length == 3\r\n+                && !GenericService.class.isAssignableFrom(invoker.getInterface())) {\r\n+\r\n+            String generic = inv.getAttachment(GENERIC_KEY);\r\n+            if (StringUtils.isBlank(generic)) {\r\n+                generic = RpcContext.getContext().getAttachment(GENERIC_KEY);\r\n+            }\r\n+\r\n+            if (appResponse.hasException()) {\r\n+                Throwable appException = appResponse.getException();\r\n+                if (appException instanceof GenericException) {\r\n+                    GenericException tmp = (GenericException) appException;\r\n+                    appException = new com.alibaba.dubbo.rpc.service.GenericException(tmp.getExceptionClass(), tmp.getExceptionMessage());\r\n+                }\r\n+                if (!(appException instanceof com.alibaba.dubbo.rpc.service.GenericException)) {\r\n+                    appException = new com.alibaba.dubbo.rpc.service.GenericException(appException);\r\n+                }\r\n+                appResponse.setException(appException);\r\n+            }\r\n+            if (ProtocolUtils.isJavaGenericSerialization(generic)) {\r\n+                try {\r\n+                    UnsafeByteArrayOutputStream os = new UnsafeByteArrayOutputStream(512);\r\n+                    ExtensionLoader.getExtensionLoader(Serialization.class).getExtension(GENERIC_SERIALIZATION_NATIVE_JAVA).serialize(null, os).writeObject(appResponse.getValue());\r\n+                    appResponse.setValue(os.toByteArray());\r\n+                } catch (IOException e) {\r\n+                    throw new RpcException(\r\n+                            \"Generic serialization [\" +\r\n+                                    GENERIC_SERIALIZATION_NATIVE_JAVA +\r\n+                                    \"] serialize result failed.\", e);\r\n+                }\r\n+            } else if (ProtocolUtils.isBeanGenericSerialization(generic)) {\r\n+                appResponse.setValue(JavaBeanSerializeUtil.serialize(appResponse.getValue(), JavaBeanAccessor.METHOD));\r\n+            } else if (ProtocolUtils.isProtobufGenericSerialization(generic)) {\r\n+                try {\r\n+                    UnsafeByteArrayOutputStream os = new UnsafeByteArrayOutputStream(512);\r\n+                    ExtensionLoader.getExtensionLoader(Serialization.class)\r\n+                            .getExtension(GENERIC_SERIALIZATION_PROTOBUF)\r\n+                            .serialize(null, os).writeObject(appResponse.getValue());\r\n+                    appResponse.setValue(os.toString());\r\n+                } catch (IOException e) {\r\n+                    throw new RpcException(\"Generic serialization [\" +\r\n+                            GENERIC_SERIALIZATION_PROTOBUF +\r\n+                            \"] serialize result failed.\", e);\r\n+                }\r\n+            } else if (ProtocolUtils.isGenericReturnRawResult(generic)) {\r\n+                return;\r\n+            } else {\r\n+                appResponse.setValue(PojoUtils.generalize(appResponse.getValue()));\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void onError(Throwable t, Invoker<?> invoker, Invocation invocation) {\r\n+\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/TpsLimitFilter.java", "source2": "org/apache/dubbo/rpc/filter/TpsLimitFilter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,59 +1,59 @@\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-\n-package org.apache.dubbo.rpc.filter;\n-\n-import org.apache.dubbo.common.constants.CommonConstants;\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.rpc.Filter;\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.filter.tps.DefaultTPSLimiter;\n-import org.apache.dubbo.rpc.filter.tps.TPSLimiter;\n-\n-import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_RATE_KEY;\n-\n-/**\n- * TpsLimitFilter limit the TPS (transaction per second) for all method of a service or a particular method.\n- * Service or method url can define <b>tps</b> or <b>tps.interval</b> to control this control.It use {@link DefaultTPSLimiter}\n- * as it limit checker. If a provider service method is configured with <b>tps</b>(optionally with <b>tps.interval</b>),then\n- * if invocation count exceed the configured <b>tps</b> value (default is -1 which means unlimited) then invocation will get\n- * RpcException.\n- * */\n-@Activate(group = CommonConstants.PROVIDER, value = TPS_LIMIT_RATE_KEY)\n-public class TpsLimitFilter implements Filter {\n-\n-    private final TPSLimiter tpsLimiter = new DefaultTPSLimiter();\n-\n-    @Override\n-    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\n-\n-        if (!tpsLimiter.isAllowable(invoker.getUrl(), invocation)) {\n-            throw new RpcException(\n-                    \"Failed to invoke service \" +\n-                            invoker.getInterface().getName() +\n-                            \".\" +\n-                            invocation.getMethodName() +\n-                            \" because exceed max service tps.\");\n-        }\n-\n-        return invoker.invoke(invocation);\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+\r\n+package org.apache.dubbo.rpc.filter;\r\n+\r\n+import org.apache.dubbo.common.constants.CommonConstants;\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.rpc.Filter;\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.filter.tps.DefaultTPSLimiter;\r\n+import org.apache.dubbo.rpc.filter.tps.TPSLimiter;\r\n+\r\n+import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_RATE_KEY;\r\n+\r\n+/**\r\n+ * TpsLimitFilter limit the TPS (transaction per second) for all method of a service or a particular method.\r\n+ * Service or method url can define <b>tps</b> or <b>tps.interval</b> to control this control.It use {@link DefaultTPSLimiter}\r\n+ * as it limit checker. If a provider service method is configured with <b>tps</b>(optionally with <b>tps.interval</b>),then\r\n+ * if invocation count exceed the configured <b>tps</b> value (default is -1 which means unlimited) then invocation will get\r\n+ * RpcException.\r\n+ * */\r\n+@Activate(group = CommonConstants.PROVIDER, value = TPS_LIMIT_RATE_KEY)\r\n+public class TpsLimitFilter implements Filter {\r\n+\r\n+    private final TPSLimiter tpsLimiter = new DefaultTPSLimiter();\r\n+\r\n+    @Override\r\n+    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {\r\n+\r\n+        if (!tpsLimiter.isAllowable(invoker.getUrl(), invocation)) {\r\n+            throw new RpcException(\r\n+                    \"Failed to invoke service \" +\r\n+                            invoker.getInterface().getName() +\r\n+                            \".\" +\r\n+                            invocation.getMethodName() +\r\n+                            \" because exceed max service tps.\");\r\n+        }\r\n+\r\n+        return invoker.invoke(invocation);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/tps/DefaultTPSLimiter.java", "source2": "org/apache/dubbo/rpc/filter/tps/DefaultTPSLimiter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,67 +1,67 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.rpc.filter.tps;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.rpc.Invocation;\n-\n-import java.util.concurrent.ConcurrentHashMap;\n-import java.util.concurrent.ConcurrentMap;\n-\n-import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_RATE_KEY;\n-import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_INTERVAL_KEY;\n-import static org.apache.dubbo.rpc.Constants.DEFAULT_TPS_LIMIT_INTERVAL;\n-\n-/**\n- * DefaultTPSLimiter is a default implementation for tps filter. It is an in memory based implementation for storing\n- * tps information. It internally use\n- *\n- * @see org.apache.dubbo.rpc.filter.TpsLimitFilter\n- */\n-public class DefaultTPSLimiter implements TPSLimiter {\n-\n-    private final ConcurrentMap<String, StatItem> stats = new ConcurrentHashMap<String, StatItem>();\n-\n-    @Override\n-    public boolean isAllowable(URL url, Invocation invocation) {\n-        int rate = url.getParameter(TPS_LIMIT_RATE_KEY, -1);\n-        long interval = url.getParameter(TPS_LIMIT_INTERVAL_KEY, DEFAULT_TPS_LIMIT_INTERVAL);\n-        String serviceKey = url.getServiceKey();\n-        if (rate > 0) {\n-            StatItem statItem = stats.get(serviceKey);\n-            if (statItem == null) {\n-                stats.putIfAbsent(serviceKey, new StatItem(serviceKey, rate, interval));\n-                statItem = stats.get(serviceKey);\n-            } else {\n-                //rate or interval has changed, rebuild\n-                if (statItem.getRate() != rate || statItem.getInterval() != interval) {\n-                    stats.put(serviceKey, new StatItem(serviceKey, rate, interval));\n-                    statItem = stats.get(serviceKey);\n-                }\n-            }\n-            return statItem.isAllowable();\n-        } else {\n-            StatItem statItem = stats.get(serviceKey);\n-            if (statItem != null) {\n-                stats.remove(serviceKey);\n-            }\n-        }\n-\n-        return true;\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.filter.tps;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+import java.util.concurrent.ConcurrentMap;\r\n+\r\n+import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_RATE_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.TPS_LIMIT_INTERVAL_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.DEFAULT_TPS_LIMIT_INTERVAL;\r\n+\r\n+/**\r\n+ * DefaultTPSLimiter is a default implementation for tps filter. It is an in memory based implementation for storing\r\n+ * tps information. It internally use\r\n+ *\r\n+ * @see org.apache.dubbo.rpc.filter.TpsLimitFilter\r\n+ */\r\n+public class DefaultTPSLimiter implements TPSLimiter {\r\n+\r\n+    private final ConcurrentMap<String, StatItem> stats = new ConcurrentHashMap<String, StatItem>();\r\n+\r\n+    @Override\r\n+    public boolean isAllowable(URL url, Invocation invocation) {\r\n+        int rate = url.getParameter(TPS_LIMIT_RATE_KEY, -1);\r\n+        long interval = url.getParameter(TPS_LIMIT_INTERVAL_KEY, DEFAULT_TPS_LIMIT_INTERVAL);\r\n+        String serviceKey = url.getServiceKey();\r\n+        if (rate > 0) {\r\n+            StatItem statItem = stats.get(serviceKey);\r\n+            if (statItem == null) {\r\n+                stats.putIfAbsent(serviceKey, new StatItem(serviceKey, rate, interval));\r\n+                statItem = stats.get(serviceKey);\r\n+            } else {\r\n+                //rate or interval has changed, rebuild\r\n+                if (statItem.getRate() != rate || statItem.getInterval() != interval) {\r\n+                    stats.put(serviceKey, new StatItem(serviceKey, rate, interval));\r\n+                    statItem = stats.get(serviceKey);\r\n+                }\r\n+            }\r\n+            return statItem.isAllowable();\r\n+        } else {\r\n+            StatItem statItem = stats.get(serviceKey);\r\n+            if (statItem != null) {\r\n+                stats.remove(serviceKey);\r\n+            }\r\n+        }\r\n+\r\n+        return true;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/filter/tps/StatItem.java", "source2": "org/apache/dubbo/rpc/filter/tps/StatItem.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,92 +1,92 @@\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.filter.tps;\n-\n-import java.util.concurrent.atomic.LongAdder;\n-\n-/**\n- * Judge whether a particular invocation of service provider method should be allowed within a configured time interval.\n- * As a state it contain name of key ( e.g. method), last invocation time, interval and rate count.\n- */\n-class StatItem {\n-\n-    private String name;\n-\n-    private long lastResetTime;\n-\n-    private long interval;\n-\n-    private LongAdder token;\n-\n-    private int rate;\n-\n-    StatItem(String name, int rate, long interval) {\n-        this.name = name;\n-        this.rate = rate;\n-        this.interval = interval;\n-        this.lastResetTime = System.currentTimeMillis();\n-        this.token = buildLongAdder(rate);\n-    }\n-\n-    public boolean isAllowable() {\n-        long now = System.currentTimeMillis();\n-        if (now > lastResetTime + interval) {\n-            token = buildLongAdder(rate);\n-            lastResetTime = now;\n-        }\n-\n-        if (token.sum() < 0) {\n-            return false;\n-        }\n-        token.decrement();\n-        return true;\n-    }\n-\n-    public long getInterval() {\n-        return interval;\n-    }\n-\n-\n-    public int getRate() {\n-        return rate;\n-    }\n-\n-\n-    long getLastResetTime() {\n-        return lastResetTime;\n-    }\n-\n-    long getToken() {\n-        return token.sum();\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return new StringBuilder(32).append(\"StatItem \")\n-                .append(\"[name=\").append(name).append(\", \")\n-                .append(\"rate = \").append(rate).append(\", \")\n-                .append(\"interval = \").append(interval).append(\"]\")\n-                .toString();\n-    }\n-\n-    private LongAdder buildLongAdder(int rate) {\n-        LongAdder adder = new LongAdder();\n-        adder.add(rate);\n-        return adder;\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.filter.tps;\r\n+\r\n+import java.util.concurrent.atomic.LongAdder;\r\n+\r\n+/**\r\n+ * Judge whether a particular invocation of service provider method should be allowed within a configured time interval.\r\n+ * As a state it contain name of key ( e.g. method), last invocation time, interval and rate count.\r\n+ */\r\n+class StatItem {\r\n+\r\n+    private String name;\r\n+\r\n+    private long lastResetTime;\r\n+\r\n+    private long interval;\r\n+\r\n+    private LongAdder token;\r\n+\r\n+    private int rate;\r\n+\r\n+    StatItem(String name, int rate, long interval) {\r\n+        this.name = name;\r\n+        this.rate = rate;\r\n+        this.interval = interval;\r\n+        this.lastResetTime = System.currentTimeMillis();\r\n+        this.token = buildLongAdder(rate);\r\n+    }\r\n+\r\n+    public boolean isAllowable() {\r\n+        long now = System.currentTimeMillis();\r\n+        if (now > lastResetTime + interval) {\r\n+            token = buildLongAdder(rate);\r\n+            lastResetTime = now;\r\n+        }\r\n+\r\n+        if (token.sum() < 0) {\r\n+            return false;\r\n+        }\r\n+        token.decrement();\r\n+        return true;\r\n+    }\r\n+\r\n+    public long getInterval() {\r\n+        return interval;\r\n+    }\r\n+\r\n+\r\n+    public int getRate() {\r\n+        return rate;\r\n+    }\r\n+\r\n+\r\n+    long getLastResetTime() {\r\n+        return lastResetTime;\r\n+    }\r\n+\r\n+    long getToken() {\r\n+        return token.sum();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return new StringBuilder(32).append(\"StatItem \")\r\n+                .append(\"[name=\").append(name).append(\", \")\r\n+                .append(\"rate = \").append(rate).append(\", \")\r\n+                .append(\"interval = \").append(interval).append(\"]\")\r\n+                .toString();\r\n+    }\r\n+\r\n+    private LongAdder buildLongAdder(int rate) {\r\n+        LongAdder adder = new LongAdder();\r\n+        adder.add(rate);\r\n+        return adder;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/AbstractInvoker.java", "source2": "org/apache/dubbo/rpc/protocol/AbstractInvoker.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,208 +1,208 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.Version;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.threadpool.ThreadlessExecutor;\n-import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;\n-import org.apache.dubbo.common.utils.ArrayUtils;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.NetUtils;\n-import org.apache.dubbo.remoting.transport.CodecSupport;\n-import org.apache.dubbo.rpc.AsyncRpcResult;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.InvokeMode;\n-import org.apache.dubbo.rpc.Invoker;\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.RpcInvocation;\n-import org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter;\n-import org.apache.dubbo.rpc.support.RpcUtils;\n-\n-import java.lang.reflect.InvocationTargetException;\n-import java.util.Collections;\n-import java.util.HashMap;\n-import java.util.Map;\n-import java.util.concurrent.ExecutorService;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-import static org.apache.dubbo.remoting.Constants.DEFAULT_REMOTING_SERIALIZATION;\n-import static org.apache.dubbo.remoting.Constants.SERIALIZATION_KEY;\n-import static org.apache.dubbo.rpc.Constants.SERIALIZATION_ID_KEY;\n-\n-/**\n- * This Invoker works on Consumer side.\n- */\n-public abstract class AbstractInvoker<T> implements Invoker<T> {\n-\n-    protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    private final Class<T> type;\n-\n-    private final URL url;\n-\n-    private final Map<String, Object> attachment;\n-\n-    private volatile boolean available = true;\n-\n-    private AtomicBoolean destroyed = new AtomicBoolean(false);\n-\n-    public AbstractInvoker(Class<T> type, URL url) {\n-        this(type, url, (Map<String, Object>) null);\n-    }\n-\n-    public AbstractInvoker(Class<T> type, URL url, String[] keys) {\n-        this(type, url, convertAttachment(url, keys));\n-    }\n-\n-    public AbstractInvoker(Class<T> type, URL url, Map<String, Object> attachment) {\n-        if (type == null) {\n-            throw new IllegalArgumentException(\"service type == null\");\n-        }\n-        if (url == null) {\n-            throw new IllegalArgumentException(\"service url == null\");\n-        }\n-        this.type = type;\n-        this.url = url;\n-        this.attachment = attachment == null ? null : Collections.unmodifiableMap(attachment);\n-    }\n-\n-    private static Map<String, Object> convertAttachment(URL url, String[] keys) {\n-        if (ArrayUtils.isEmpty(keys)) {\n-            return null;\n-        }\n-        Map<String, Object> attachment = new HashMap<>();\n-        for (String key : keys) {\n-            String value = url.getParameter(key);\n-            if (value != null && value.length() > 0) {\n-                attachment.put(key, value);\n-            }\n-        }\n-        return attachment;\n-    }\n-\n-    @Override\n-    public Class<T> getInterface() {\n-        return type;\n-    }\n-\n-    @Override\n-    public URL getUrl() {\n-        return url;\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return available;\n-    }\n-\n-    protected void setAvailable(boolean available) {\n-        this.available = available;\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        if (!destroyed.compareAndSet(false, true)) {\n-            return;\n-        }\n-        setAvailable(false);\n-    }\n-\n-    public boolean isDestroyed() {\n-        return destroyed.get();\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return getInterface() + \" -> \" + (getUrl() == null ? \"\" : getUrl().toString());\n-    }\n-\n-    @Override\n-    public Result invoke(Invocation inv) throws RpcException {\n-        // if invoker is destroyed due to address refresh from registry, let's allow the current invoke to proceed\n-        if (destroyed.get()) {\n-            logger.warn(\"Invoker for service \" + this + \" on consumer \" + NetUtils.getLocalHost() + \" is destroyed, \"\n-                    + \", dubbo version is \" + Version.getVersion() + \", this invoker should not be used any longer\");\n-        }\n-        RpcInvocation invocation = (RpcInvocation) inv;\n-        invocation.setInvoker(this);\n-        if (CollectionUtils.isNotEmptyMap(attachment)) {\n-            invocation.addObjectAttachmentsIfAbsent(attachment);\n-        }\n-\n-        Map<String, Object> contextAttachments = RpcContext.getContext().getObjectAttachments();\n-        if (CollectionUtils.isNotEmptyMap(contextAttachments)) {\n-            /**\n-             * invocation.addAttachmentsIfAbsent(context){@link RpcInvocation#addAttachmentsIfAbsent(Map)}should not be used here,\n-             * because the {@link RpcContext#setAttachment(String, String)} is passed in the Filter when the call is triggered\n-             * by the built-in retry mechanism of the Dubbo. The attachment to update RpcContext will no longer work, which is\n-             * a mistake in most cases (for example, through Filter to RpcContext output traceId and spanId and other information).\n-             */\n-            invocation.addObjectAttachments(contextAttachments);\n-        }\n-\n-        invocation.setInvokeMode(RpcUtils.getInvokeMode(url, invocation));\n-        RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation);\n-\n-        Byte serializationId = CodecSupport.getIDByName(getUrl().getParameter(SERIALIZATION_KEY, DEFAULT_REMOTING_SERIALIZATION));\n-        if (serializationId != null) {\n-            invocation.put(SERIALIZATION_ID_KEY, serializationId);\n-        }\n-\n-        AsyncRpcResult asyncResult;\n-        try {\n-            asyncResult = (AsyncRpcResult) doInvoke(invocation);\n-        } catch (InvocationTargetException e) { // biz exception\n-            Throwable te = e.getTargetException();\n-            if (te == null) {\n-                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\n-            } else {\n-                if (te instanceof RpcException) {\n-                    ((RpcException) te).setCode(RpcException.BIZ_EXCEPTION);\n-                }\n-                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, te, invocation);\n-            }\n-        } catch (RpcException e) {\n-            if (e.isBiz()) {\n-                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\n-            } else {\n-                throw e;\n-            }\n-        } catch (Throwable e) {\n-            asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\n-        }\n-        RpcContext.getContext().setFuture(new FutureAdapter(asyncResult.getResponseFuture()));\n-        return asyncResult;\n-    }\n-\n-    protected ExecutorService getCallbackExecutor(URL url, Invocation inv) {\n-        ExecutorService sharedExecutor = ExtensionLoader.getExtensionLoader(ExecutorRepository.class).getDefaultExtension().getExecutor(url);\n-        if (InvokeMode.SYNC == RpcUtils.getInvokeMode(getUrl(), inv)) {\n-            return new ThreadlessExecutor(sharedExecutor);\n-        } else {\n-            return sharedExecutor;\n-        }\n-    }\n-\n-    protected abstract Result doInvoke(Invocation invocation) throws Throwable;\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.Version;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.threadpool.ThreadlessExecutor;\r\n+import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;\r\n+import org.apache.dubbo.common.utils.ArrayUtils;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.NetUtils;\r\n+import org.apache.dubbo.remoting.transport.CodecSupport;\r\n+import org.apache.dubbo.rpc.AsyncRpcResult;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.InvokeMode;\r\n+import org.apache.dubbo.rpc.Invoker;\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.RpcInvocation;\r\n+import org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter;\r\n+import org.apache.dubbo.rpc.support.RpcUtils;\r\n+\r\n+import java.lang.reflect.InvocationTargetException;\r\n+import java.util.Collections;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+import java.util.concurrent.ExecutorService;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+import static org.apache.dubbo.remoting.Constants.DEFAULT_REMOTING_SERIALIZATION;\r\n+import static org.apache.dubbo.remoting.Constants.SERIALIZATION_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.SERIALIZATION_ID_KEY;\r\n+\r\n+/**\r\n+ * This Invoker works on Consumer side.\r\n+ */\r\n+public abstract class AbstractInvoker<T> implements Invoker<T> {\r\n+\r\n+    protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    private final Class<T> type;\r\n+\r\n+    private final URL url;\r\n+\r\n+    private final Map<String, Object> attachment;\r\n+\r\n+    private volatile boolean available = true;\r\n+\r\n+    private AtomicBoolean destroyed = new AtomicBoolean(false);\r\n+\r\n+    public AbstractInvoker(Class<T> type, URL url) {\r\n+        this(type, url, (Map<String, Object>) null);\r\n+    }\r\n+\r\n+    public AbstractInvoker(Class<T> type, URL url, String[] keys) {\r\n+        this(type, url, convertAttachment(url, keys));\r\n+    }\r\n+\r\n+    public AbstractInvoker(Class<T> type, URL url, Map<String, Object> attachment) {\r\n+        if (type == null) {\r\n+            throw new IllegalArgumentException(\"service type == null\");\r\n+        }\r\n+        if (url == null) {\r\n+            throw new IllegalArgumentException(\"service url == null\");\r\n+        }\r\n+        this.type = type;\r\n+        this.url = url;\r\n+        this.attachment = attachment == null ? null : Collections.unmodifiableMap(attachment);\r\n+    }\r\n+\r\n+    private static Map<String, Object> convertAttachment(URL url, String[] keys) {\r\n+        if (ArrayUtils.isEmpty(keys)) {\r\n+            return null;\r\n+        }\r\n+        Map<String, Object> attachment = new HashMap<>();\r\n+        for (String key : keys) {\r\n+            String value = url.getParameter(key);\r\n+            if (value != null && value.length() > 0) {\r\n+                attachment.put(key, value);\r\n+            }\r\n+        }\r\n+        return attachment;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Class<T> getInterface() {\r\n+        return type;\r\n+    }\r\n+\r\n+    @Override\r\n+    public URL getUrl() {\r\n+        return url;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return available;\r\n+    }\r\n+\r\n+    protected void setAvailable(boolean available) {\r\n+        this.available = available;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        if (!destroyed.compareAndSet(false, true)) {\r\n+            return;\r\n+        }\r\n+        setAvailable(false);\r\n+    }\r\n+\r\n+    public boolean isDestroyed() {\r\n+        return destroyed.get();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return getInterface() + \" -> \" + (getUrl() == null ? \"\" : getUrl().toString());\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result invoke(Invocation inv) throws RpcException {\r\n+        // if invoker is destroyed due to address refresh from registry, let's allow the current invoke to proceed\r\n+        if (destroyed.get()) {\r\n+            logger.warn(\"Invoker for service \" + this + \" on consumer \" + NetUtils.getLocalHost() + \" is destroyed, \"\r\n+                    + \", dubbo version is \" + Version.getVersion() + \", this invoker should not be used any longer\");\r\n+        }\r\n+        RpcInvocation invocation = (RpcInvocation) inv;\r\n+        invocation.setInvoker(this);\r\n+        if (CollectionUtils.isNotEmptyMap(attachment)) {\r\n+            invocation.addObjectAttachmentsIfAbsent(attachment);\r\n+        }\r\n+\r\n+        Map<String, Object> contextAttachments = RpcContext.getContext().getObjectAttachments();\r\n+        if (CollectionUtils.isNotEmptyMap(contextAttachments)) {\r\n+            /**\r\n+             * invocation.addAttachmentsIfAbsent(context){@link RpcInvocation#addAttachmentsIfAbsent(Map)}should not be used here,\r\n+             * because the {@link RpcContext#setAttachment(String, String)} is passed in the Filter when the call is triggered\r\n+             * by the built-in retry mechanism of the Dubbo. The attachment to update RpcContext will no longer work, which is\r\n+             * a mistake in most cases (for example, through Filter to RpcContext output traceId and spanId and other information).\r\n+             */\r\n+            invocation.addObjectAttachments(contextAttachments);\r\n+        }\r\n+\r\n+        invocation.setInvokeMode(RpcUtils.getInvokeMode(url, invocation));\r\n+        RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation);\r\n+\r\n+        Byte serializationId = CodecSupport.getIDByName(getUrl().getParameter(SERIALIZATION_KEY, DEFAULT_REMOTING_SERIALIZATION));\r\n+        if (serializationId != null) {\r\n+            invocation.put(SERIALIZATION_ID_KEY, serializationId);\r\n+        }\r\n+\r\n+        AsyncRpcResult asyncResult;\r\n+        try {\r\n+            asyncResult = (AsyncRpcResult) doInvoke(invocation);\r\n+        } catch (InvocationTargetException e) { // biz exception\r\n+            Throwable te = e.getTargetException();\r\n+            if (te == null) {\r\n+                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\r\n+            } else {\r\n+                if (te instanceof RpcException) {\r\n+                    ((RpcException) te).setCode(RpcException.BIZ_EXCEPTION);\r\n+                }\r\n+                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, te, invocation);\r\n+            }\r\n+        } catch (RpcException e) {\r\n+            if (e.isBiz()) {\r\n+                asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\r\n+            } else {\r\n+                throw e;\r\n+            }\r\n+        } catch (Throwable e) {\r\n+            asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation);\r\n+        }\r\n+        RpcContext.getContext().setFuture(new FutureAdapter(asyncResult.getResponseFuture()));\r\n+        return asyncResult;\r\n+    }\r\n+\r\n+    protected ExecutorService getCallbackExecutor(URL url, Invocation inv) {\r\n+        ExecutorService sharedExecutor = ExtensionLoader.getExtensionLoader(ExecutorRepository.class).getDefaultExtension().getExecutor(url);\r\n+        if (InvokeMode.SYNC == RpcUtils.getInvokeMode(getUrl(), inv)) {\r\n+            return new ThreadlessExecutor(sharedExecutor);\r\n+        } else {\r\n+            return sharedExecutor;\r\n+        }\r\n+    }\r\n+\r\n+    protected abstract Result doInvoke(Invocation invocation) throws Throwable;\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/AbstractProtocol.java", "source2": "org/apache/dubbo/rpc/protocol/AbstractProtocol.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,116 +1,116 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ConcurrentHashSet;\n-import org.apache.dubbo.remoting.Constants;\n-import org.apache.dubbo.rpc.Exporter;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.Protocol;\n-import org.apache.dubbo.rpc.ProtocolServer;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.support.ProtocolUtils;\n-\n-import java.util.ArrayList;\n-import java.util.Collection;\n-import java.util.Collections;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.concurrent.ConcurrentHashMap;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-\n-/**\n- * abstract ProtocolSupport.\n- */\n-public abstract class AbstractProtocol implements Protocol {\n-\n-    protected final Logger logger = LoggerFactory.getLogger(getClass());\n-\n-    protected final Map<String, Exporter<?>> exporterMap = new ConcurrentHashMap<String, Exporter<?>>();\n-\n-    /**\n-     * <host:port, ProtocolServer>\n-     */\n-    protected final Map<String, ProtocolServer> serverMap = new ConcurrentHashMap<>();\n-\n-    //TODO SoftReference\n-    protected final Set<Invoker<?>> invokers = new ConcurrentHashSet<Invoker<?>>();\n-\n-    protected static String serviceKey(URL url) {\n-        int port = url.getParameter(Constants.BIND_PORT_KEY, url.getPort());\n-        return serviceKey(port, url.getPath(), url.getParameter(VERSION_KEY), url.getParameter(GROUP_KEY));\n-    }\n-\n-    protected static String serviceKey(int port, String serviceName, String serviceVersion, String serviceGroup) {\n-        return ProtocolUtils.serviceKey(port, serviceName, serviceVersion, serviceGroup);\n-    }\n-\n-    public List<ProtocolServer> getServers() {\n-        return Collections.unmodifiableList(new ArrayList<>(serverMap.values()));\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        for (Invoker<?> invoker : invokers) {\n-            if (invoker != null) {\n-                invokers.remove(invoker);\n-                try {\n-                    if (logger.isInfoEnabled()) {\n-                        logger.info(\"Destroy reference: \" + invoker.getUrl());\n-                    }\n-                    invoker.destroy();\n-                } catch (Throwable t) {\n-                    logger.warn(t.getMessage(), t);\n-                }\n-            }\n-        }\n-        for (String key : new ArrayList<String>(exporterMap.keySet())) {\n-            Exporter<?> exporter = exporterMap.remove(key);\n-            if (exporter != null) {\n-                try {\n-                    if (logger.isInfoEnabled()) {\n-                        logger.info(\"Unexport service: \" + exporter.getInvoker().getUrl());\n-                    }\n-                    exporter.unexport();\n-                } catch (Throwable t) {\n-                    logger.warn(t.getMessage(), t);\n-                }\n-            }\n-        }\n-    }\n-\n-    @Override\n-    public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {\n-        return new AsyncToSyncInvoker<>(protocolBindingRefer(type, url));\n-    }\n-\n-    protected abstract <T> Invoker<T> protocolBindingRefer(Class<T> type, URL url) throws RpcException;\n-\n-    public Map<String, Exporter<?>> getExporterMap() {\n-        return exporterMap;\n-    }\n-\n-    public Collection<Exporter<?>> getExporters() {\n-        return Collections.unmodifiableCollection(exporterMap.values());\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ConcurrentHashSet;\r\n+import org.apache.dubbo.remoting.Constants;\r\n+import org.apache.dubbo.rpc.Exporter;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.Protocol;\r\n+import org.apache.dubbo.rpc.ProtocolServer;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.support.ProtocolUtils;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Collection;\r\n+import java.util.Collections;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.concurrent.ConcurrentHashMap;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+\r\n+/**\r\n+ * abstract ProtocolSupport.\r\n+ */\r\n+public abstract class AbstractProtocol implements Protocol {\r\n+\r\n+    protected final Logger logger = LoggerFactory.getLogger(getClass());\r\n+\r\n+    protected final Map<String, Exporter<?>> exporterMap = new ConcurrentHashMap<String, Exporter<?>>();\r\n+\r\n+    /**\r\n+     * <host:port, ProtocolServer>\r\n+     */\r\n+    protected final Map<String, ProtocolServer> serverMap = new ConcurrentHashMap<>();\r\n+\r\n+    //TODO SoftReference\r\n+    protected final Set<Invoker<?>> invokers = new ConcurrentHashSet<Invoker<?>>();\r\n+\r\n+    protected static String serviceKey(URL url) {\r\n+        int port = url.getParameter(Constants.BIND_PORT_KEY, url.getPort());\r\n+        return serviceKey(port, url.getPath(), url.getParameter(VERSION_KEY), url.getParameter(GROUP_KEY));\r\n+    }\r\n+\r\n+    protected static String serviceKey(int port, String serviceName, String serviceVersion, String serviceGroup) {\r\n+        return ProtocolUtils.serviceKey(port, serviceName, serviceVersion, serviceGroup);\r\n+    }\r\n+\r\n+    public List<ProtocolServer> getServers() {\r\n+        return Collections.unmodifiableList(new ArrayList<>(serverMap.values()));\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        for (Invoker<?> invoker : invokers) {\r\n+            if (invoker != null) {\r\n+                invokers.remove(invoker);\r\n+                try {\r\n+                    if (logger.isInfoEnabled()) {\r\n+                        logger.info(\"Destroy reference: \" + invoker.getUrl());\r\n+                    }\r\n+                    invoker.destroy();\r\n+                } catch (Throwable t) {\r\n+                    logger.warn(t.getMessage(), t);\r\n+                }\r\n+            }\r\n+        }\r\n+        for (String key : new ArrayList<String>(exporterMap.keySet())) {\r\n+            Exporter<?> exporter = exporterMap.remove(key);\r\n+            if (exporter != null) {\r\n+                try {\r\n+                    if (logger.isInfoEnabled()) {\r\n+                        logger.info(\"Unexport service: \" + exporter.getInvoker().getUrl());\r\n+                    }\r\n+                    exporter.unexport();\r\n+                } catch (Throwable t) {\r\n+                    logger.warn(t.getMessage(), t);\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {\r\n+        return new AsyncToSyncInvoker<>(protocolBindingRefer(type, url));\r\n+    }\r\n+\r\n+    protected abstract <T> Invoker<T> protocolBindingRefer(Class<T> type, URL url) throws RpcException;\r\n+\r\n+    public Map<String, Exporter<?>> getExporterMap() {\r\n+        return exporterMap;\r\n+    }\r\n+\r\n+    public Collection<Exporter<?>> getExporters() {\r\n+        return Collections.unmodifiableCollection(exporterMap.values());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/AsyncToSyncInvoker.java", "source2": "org/apache/dubbo/rpc/protocol/AsyncToSyncInvoker.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,102 +1,102 @@\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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.remoting.RemotingException;\n-import org.apache.dubbo.remoting.TimeoutException;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.InvokeMode;\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-\n-import java.util.concurrent.ExecutionException;\n-import java.util.concurrent.TimeUnit;\n-\n-/**\n- * This class will work as a wrapper wrapping outside of each protocol invoker.\n- *\n- * @param <T>\n- */\n-public class AsyncToSyncInvoker<T> implements Invoker<T> {\n-\n-    private Invoker<T> invoker;\n-\n-    public AsyncToSyncInvoker(Invoker<T> invoker) {\n-        this.invoker = invoker;\n-    }\n-\n-    @Override\n-    public Class<T> getInterface() {\n-        return invoker.getInterface();\n-    }\n-\n-    @Override\n-    public Result invoke(Invocation invocation) throws RpcException {\n-        Result asyncResult = invoker.invoke(invocation);\n-\n-        try {\n-            if (InvokeMode.SYNC == ((RpcInvocation) invocation).getInvokeMode()) {\n-                /**\n-                 * NOTICE!\n-                 * must call {@link java.util.concurrent.CompletableFuture#get(long, TimeUnit)} because\n-                 * {@link java.util.concurrent.CompletableFuture#get()} was proved to have serious performance drop.\n-                 */\n-                asyncResult.get(Integer.MAX_VALUE, TimeUnit.MILLISECONDS);\n-            }\n-        } catch (InterruptedException e) {\n-            throw new RpcException(\"Interrupted unexpectedly while waiting for remote result to return!  method: \" +\n-                    invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-        } catch (ExecutionException e) {\n-            Throwable t = e.getCause();\n-            if (t instanceof TimeoutException) {\n-                throw new RpcException(RpcException.TIMEOUT_EXCEPTION, \"Invoke remote method timeout. method: \" +\n-                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-            } else if (t instanceof RemotingException) {\n-                throw new RpcException(RpcException.NETWORK_EXCEPTION, \"Failed to invoke remote method: \" +\n-                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-            } else {\n-                throw new RpcException(RpcException.UNKNOWN_EXCEPTION, \"Fail to invoke remote method: \" +\n-                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-            }\n-        } catch (Throwable e) {\n-            throw new RpcException(e.getMessage(), e);\n-        }\n-        return asyncResult;\n-    }\n-\n-    @Override\n-    public URL getUrl() {\n-        return invoker.getUrl();\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return invoker.isAvailable();\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        invoker.destroy();\n-    }\n-\n-    public Invoker<T> getInvoker() {\n-        return invoker;\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.remoting.RemotingException;\r\n+import org.apache.dubbo.remoting.TimeoutException;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.InvokeMode;\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+\r\n+import java.util.concurrent.ExecutionException;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+/**\r\n+ * This class will work as a wrapper wrapping outside of each protocol invoker.\r\n+ *\r\n+ * @param <T>\r\n+ */\r\n+public class AsyncToSyncInvoker<T> implements Invoker<T> {\r\n+\r\n+    private Invoker<T> invoker;\r\n+\r\n+    public AsyncToSyncInvoker(Invoker<T> invoker) {\r\n+        this.invoker = invoker;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Class<T> getInterface() {\r\n+        return invoker.getInterface();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result invoke(Invocation invocation) throws RpcException {\r\n+        Result asyncResult = invoker.invoke(invocation);\r\n+\r\n+        try {\r\n+            if (InvokeMode.SYNC == ((RpcInvocation) invocation).getInvokeMode()) {\r\n+                /**\r\n+                 * NOTICE!\r\n+                 * must call {@link java.util.concurrent.CompletableFuture#get(long, TimeUnit)} because\r\n+                 * {@link java.util.concurrent.CompletableFuture#get()} was proved to have serious performance drop.\r\n+                 */\r\n+                asyncResult.get(Integer.MAX_VALUE, TimeUnit.MILLISECONDS);\r\n+            }\r\n+        } catch (InterruptedException e) {\r\n+            throw new RpcException(\"Interrupted unexpectedly while waiting for remote result to return!  method: \" +\r\n+                    invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+        } catch (ExecutionException e) {\r\n+            Throwable t = e.getCause();\r\n+            if (t instanceof TimeoutException) {\r\n+                throw new RpcException(RpcException.TIMEOUT_EXCEPTION, \"Invoke remote method timeout. method: \" +\r\n+                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+            } else if (t instanceof RemotingException) {\r\n+                throw new RpcException(RpcException.NETWORK_EXCEPTION, \"Failed to invoke remote method: \" +\r\n+                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+            } else {\r\n+                throw new RpcException(RpcException.UNKNOWN_EXCEPTION, \"Fail to invoke remote method: \" +\r\n+                        invocation.getMethodName() + \", provider: \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+            }\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(e.getMessage(), e);\r\n+        }\r\n+        return asyncResult;\r\n+    }\r\n+\r\n+    @Override\r\n+    public URL getUrl() {\r\n+        return invoker.getUrl();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return invoker.isAvailable();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        invoker.destroy();\r\n+    }\r\n+\r\n+    public Invoker<T> getInvoker() {\r\n+        return invoker;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/FilterNode.java", "source2": "org/apache/dubbo/rpc/protocol/FilterNode.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;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.rpc.Filter;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.ListenableFilter;\n-import org.apache.dubbo.rpc.Result;\n-import org.apache.dubbo.rpc.RpcException;\n-\n-/**\n- * @see org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper\n- *\n- */\n-class FilterNode<T> implements Invoker<T>{\n-    private final Invoker<T> invoker;\n-    private final Invoker<T> next;\n-    private final Filter filter;\n-    \n-    public FilterNode(final Invoker<T> invoker, final Invoker<T> next, final Filter filter) {\n-        this.invoker = invoker;\n-        this.next = next;\n-        this.filter = filter;\n-    }\n-\n-    @Override\n-    public Class<T> getInterface() {\n-        return invoker.getInterface();\n-    }\n-\n-    @Override\n-    public URL getUrl() {\n-        return invoker.getUrl();\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return invoker.isAvailable();\n-    }\n-\n-    @Override\n-    public Result invoke(Invocation invocation) throws RpcException {\n-        Result asyncResult;\n-        try {\n-            asyncResult = filter.invoke(next, invocation);\n-        } catch (Exception e) {\n-            if (filter instanceof ListenableFilter) {\n-                ListenableFilter listenableFilter = ((ListenableFilter) filter);\n-                try {\n-                    Filter.Listener listener = listenableFilter.listener(invocation);\n-                    if (listener != null) {\n-                        listener.onError(e, invoker, invocation);\n-                    }\n-                } finally {\n-                    listenableFilter.removeListener(invocation);\n-                }\n-            } else if (filter instanceof Filter.Listener) {\n-                Filter.Listener listener = (Filter.Listener) filter;\n-                listener.onError(e, invoker, invocation);\n-            }\n-            throw e;\n-        } finally {\n-\n-        }\n-        return asyncResult.whenCompleteWithContext((r, t) -> {\n-            if (filter instanceof ListenableFilter) {\n-                ListenableFilter listenableFilter = ((ListenableFilter) filter);\n-                Filter.Listener listener = listenableFilter.listener(invocation);\n-                try {\n-                    if (listener != null) {\n-                        if (t == null) {\n-                            listener.onResponse(r, invoker, invocation);\n-                        } else {\n-                            listener.onError(t, invoker, invocation);\n-                        }\n-                    }\n-                } finally {\n-                    listenableFilter.removeListener(invocation);\n-                }\n-            } else if (filter instanceof Filter.Listener) {\n-                Filter.Listener listener = (Filter.Listener) filter;\n-                if (t == null) {\n-                    listener.onResponse(r, invoker, invocation);\n-                } else {\n-                    listener.onError(t, invoker, invocation);\n-                }\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        invoker.destroy();\n-    }\n-\n-    @Override\n-    public String toString() {\n-        return invoker.toString();\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;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.rpc.Filter;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.ListenableFilter;\r\n+import org.apache.dubbo.rpc.Result;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+\r\n+/**\r\n+ * @see org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper\r\n+ *\r\n+ */\r\n+class FilterNode<T> implements Invoker<T>{\r\n+    private final Invoker<T> invoker;\r\n+    private final Invoker<T> next;\r\n+    private final Filter filter;\r\n+    \r\n+    public FilterNode(final Invoker<T> invoker, final Invoker<T> next, final Filter filter) {\r\n+        this.invoker = invoker;\r\n+        this.next = next;\r\n+        this.filter = filter;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Class<T> getInterface() {\r\n+        return invoker.getInterface();\r\n+    }\r\n+\r\n+    @Override\r\n+    public URL getUrl() {\r\n+        return invoker.getUrl();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return invoker.isAvailable();\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result invoke(Invocation invocation) throws RpcException {\r\n+        Result asyncResult;\r\n+        try {\r\n+            asyncResult = filter.invoke(next, invocation);\r\n+        } catch (Exception e) {\r\n+            if (filter instanceof ListenableFilter) {\r\n+                ListenableFilter listenableFilter = ((ListenableFilter) filter);\r\n+                try {\r\n+                    Filter.Listener listener = listenableFilter.listener(invocation);\r\n+                    if (listener != null) {\r\n+                        listener.onError(e, invoker, invocation);\r\n+                    }\r\n+                } finally {\r\n+                    listenableFilter.removeListener(invocation);\r\n+                }\r\n+            } else if (filter instanceof Filter.Listener) {\r\n+                Filter.Listener listener = (Filter.Listener) filter;\r\n+                listener.onError(e, invoker, invocation);\r\n+            }\r\n+            throw e;\r\n+        } finally {\r\n+\r\n+        }\r\n+        return asyncResult.whenCompleteWithContext((r, t) -> {\r\n+            if (filter instanceof ListenableFilter) {\r\n+                ListenableFilter listenableFilter = ((ListenableFilter) filter);\r\n+                Filter.Listener listener = listenableFilter.listener(invocation);\r\n+                try {\r\n+                    if (listener != null) {\r\n+                        if (t == null) {\r\n+                            listener.onResponse(r, invoker, invocation);\r\n+                        } else {\r\n+                            listener.onError(t, invoker, invocation);\r\n+                        }\r\n+                    }\r\n+                } finally {\r\n+                    listenableFilter.removeListener(invocation);\r\n+                }\r\n+            } else if (filter instanceof Filter.Listener) {\r\n+                Filter.Listener listener = (Filter.Listener) filter;\r\n+                if (t == null) {\r\n+                    listener.onResponse(r, invoker, invocation);\r\n+                } else {\r\n+                    listener.onError(t, invoker, invocation);\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        invoker.destroy();\r\n+    }\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return invoker.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/dubbo/FutureAdapter.java", "source2": "org/apache/dubbo/rpc/protocol/dubbo/FutureAdapter.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,99 +1,99 @@\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.dubbo;\n-\n-import org.apache.dubbo.rpc.AppResponse;\n-import org.apache.dubbo.rpc.RpcException;\n-\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.CompletionException;\n-import java.util.concurrent.ExecutionException;\n-import java.util.concurrent.TimeUnit;\n-import java.util.concurrent.TimeoutException;\n-\n-/**\n- * This is the type of the Future instance users get in an async call:\n- * 1. unwrap AppResponse in appResponseFuture and convert to plain biz result represented by FutureAdapter.\n- * 2. customized behaviors meaningful for RPC, for example, {@link #cancel(boolean)}\n- */\n-public class FutureAdapter<V> extends CompletableFuture<V> {\n-\n-    private CompletableFuture<AppResponse> appResponseFuture;\n-\n-    public FutureAdapter(CompletableFuture<AppResponse> future) {\n-        this.appResponseFuture = future;\n-        future.whenComplete((appResponse, t) -> {\n-            if (t != null) {\n-                if (t instanceof CompletionException) {\n-                    t = t.getCause();\n-                }\n-                this.completeExceptionally(t);\n-            } else {\n-                if (appResponse.hasException()) {\n-                    this.completeExceptionally(appResponse.getException());\n-                } else {\n-                    this.complete((V) appResponse.getValue());\n-                }\n-            }\n-        });\n-    }\n-\n-    // TODO figure out the meaning of cancel in DefaultFuture.\n-    @Override\n-    public boolean cancel(boolean mayInterruptIfRunning) {\n-//        Invocation invocation = invocationSoftReference.get();\n-//        if (invocation != null) {\n-//            invocation.getInvoker().invoke(cancel);\n-//        }\n-        return appResponseFuture.cancel(mayInterruptIfRunning);\n-    }\n-\n-    @Override\n-    public boolean isCancelled() {\n-        return appResponseFuture.isCancelled();\n-    }\n-\n-    @Override\n-    public boolean isDone() {\n-        return super.isDone();\n-    }\n-\n-    @Override\n-    @SuppressWarnings(\"unchecked\")\n-    public V get() throws InterruptedException, ExecutionException {\n-        try {\n-            return super.get();\n-        } catch (ExecutionException | InterruptedException e) {\n-            throw e;\n-        } catch (Throwable e) {\n-            throw new RpcException(e);\n-        }\n-    }\n-\n-    @Override\n-    @SuppressWarnings(\"unchecked\")\n-    public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\n-        try {\n-            return super.get(timeout, unit);\n-        } catch (TimeoutException | ExecutionException | InterruptedException e) {\n-            throw e;\n-        } catch (Throwable e) {\n-            throw new RpcException(e);\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.dubbo;\r\n+\r\n+import org.apache.dubbo.rpc.AppResponse;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.CompletionException;\r\n+import java.util.concurrent.ExecutionException;\r\n+import java.util.concurrent.TimeUnit;\r\n+import java.util.concurrent.TimeoutException;\r\n+\r\n+/**\r\n+ * This is the type of the Future instance users get in an async call:\r\n+ * 1. unwrap AppResponse in appResponseFuture and convert to plain biz result represented by FutureAdapter.\r\n+ * 2. customized behaviors meaningful for RPC, for example, {@link #cancel(boolean)}\r\n+ */\r\n+public class FutureAdapter<V> extends CompletableFuture<V> {\r\n+\r\n+    private CompletableFuture<AppResponse> appResponseFuture;\r\n+\r\n+    public FutureAdapter(CompletableFuture<AppResponse> future) {\r\n+        this.appResponseFuture = future;\r\n+        future.whenComplete((appResponse, t) -> {\r\n+            if (t != null) {\r\n+                if (t instanceof CompletionException) {\r\n+                    t = t.getCause();\r\n+                }\r\n+                this.completeExceptionally(t);\r\n+            } else {\r\n+                if (appResponse.hasException()) {\r\n+                    this.completeExceptionally(appResponse.getException());\r\n+                } else {\r\n+                    this.complete((V) appResponse.getValue());\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    // TODO figure out the meaning of cancel in DefaultFuture.\r\n+    @Override\r\n+    public boolean cancel(boolean mayInterruptIfRunning) {\r\n+//        Invocation invocation = invocationSoftReference.get();\r\n+//        if (invocation != null) {\r\n+//            invocation.getInvoker().invoke(cancel);\r\n+//        }\r\n+        return appResponseFuture.cancel(mayInterruptIfRunning);\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isCancelled() {\r\n+        return appResponseFuture.isCancelled();\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isDone() {\r\n+        return super.isDone();\r\n+    }\r\n+\r\n+    @Override\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public V get() throws InterruptedException, ExecutionException {\r\n+        try {\r\n+            return super.get();\r\n+        } catch (ExecutionException | InterruptedException e) {\r\n+            throw e;\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\r\n+        try {\r\n+            return super.get(timeout, unit);\r\n+        } catch (TimeoutException | ExecutionException | InterruptedException e) {\r\n+            throw e;\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(e);\r\n+        }\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/dubbo/package-info.java", "source2": "org/apache/dubbo/rpc/protocol/dubbo/package-info.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,22 +1,22 @@\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-\n-/**\n- * {@link org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter} was in dubbo-rpc-dubbo module,\n- * considering some users will use this class directly, keep the package not changed.\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+\r\n+/**\r\n+ * {@link org.apache.dubbo.rpc.protocol.dubbo.FutureAdapter} was in dubbo-rpc-dubbo module,\r\n+ * considering some users will use this class directly, keep the package not changed.\r\n+ */\r\n package org.apache.dubbo.rpc.protocol.dubbo;\n"}, {"source1": "org/apache/dubbo/rpc/proxy/AbstractProxyInvoker.java", "source2": "org/apache/dubbo/rpc/proxy/AbstractProxyInvoker.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,127 +1,127 @@\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.proxy;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.rpc.AppResponse;\n-import org.apache.dubbo.rpc.AsyncContextImpl;\n-import org.apache.dubbo.rpc.AsyncRpcResult;\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.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-\n-import java.lang.reflect.InvocationTargetException;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.CompletionException;\n-\n-/**\n- * This Invoker works on provider side, delegates RPC to interface implementation.\n- */\n-public abstract class AbstractProxyInvoker<T> implements Invoker<T> {\n-    Logger logger = LoggerFactory.getLogger(AbstractProxyInvoker.class);\n-\n-    private final T proxy;\n-\n-    private final Class<T> type;\n-\n-    private final URL url;\n-\n-    public AbstractProxyInvoker(T proxy, Class<T> type, URL url) {\n-        if (proxy == null) {\n-            throw new IllegalArgumentException(\"proxy == null\");\n-        }\n-        if (type == null) {\n-            throw new IllegalArgumentException(\"interface == null\");\n-        }\n-        if (!type.isInstance(proxy)) {\n-            throw new IllegalArgumentException(proxy.getClass().getName() + \" not implement interface \" + type);\n-        }\n-        this.proxy = proxy;\n-        this.type = type;\n-        this.url = url;\n-    }\n-\n-    @Override\n-    public Class<T> getInterface() {\n-        return type;\n-    }\n-\n-    @Override\n-    public URL getUrl() {\n-        return url;\n-    }\n-\n-    @Override\n-    public boolean isAvailable() {\n-        return true;\n-    }\n-\n-    @Override\n-    public void destroy() {\n-    }\n-\n-    @Override\n-    public Result invoke(Invocation invocation) throws RpcException {\n-        try {\n-            Object value = doInvoke(proxy, invocation.getMethodName(), invocation.getParameterTypes(), invocation.getArguments());\n-            CompletableFuture<Object> future = wrapWithFuture(value);\n-            CompletableFuture<AppResponse> appResponseFuture = future.handle((obj, t) -> {\n-                AppResponse result = new AppResponse(invocation);\n-                if (t != null) {\n-                    if (t instanceof CompletionException) {\n-                        result.setException(t.getCause());\n-                    } else {\n-                        result.setException(t);\n-                    }\n-                } else {\n-                    result.setValue(obj);\n-                }\n-                return result;\n-            });\n-            return new AsyncRpcResult(appResponseFuture, invocation);\n-        } catch (InvocationTargetException e) {\n-            if (RpcContext.getContext().isAsyncStarted() && !RpcContext.getContext().stopAsync()) {\n-                logger.error(\"Provider async started, but got an exception from the original method, cannot write the exception back to consumer because an async result may have returned the new thread.\", e);\n-            }\n-            return AsyncRpcResult.newDefaultAsyncResult(null, e.getTargetException(), invocation);\n-        } catch (Throwable e) {\n-            throw new RpcException(\"Failed to invoke remote proxy method \" + invocation.getMethodName() + \" to \" + getUrl() + \", cause: \" + e.getMessage(), e);\n-        }\n-    }\n-\n-\tprivate CompletableFuture<Object> wrapWithFuture(Object value) {\n-        if (RpcContext.getContext().isAsyncStarted()) {\n-            return ((AsyncContextImpl)(RpcContext.getContext().getAsyncContext())).getInternalFuture();\n-        } else if (value instanceof CompletableFuture) {\n-            return (CompletableFuture<Object>) value;\n-        }\n-        return CompletableFuture.completedFuture(value);\n-    }\n-\n-    protected abstract Object doInvoke(T proxy, String methodName, Class<?>[] parameterTypes, Object[] arguments) throws Throwable;\n-\n-    @Override\n-    public String toString() {\n-        return getInterface() + \" -> \" + (getUrl() == null ? \" \" : getUrl().toString());\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.proxy;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.rpc.AppResponse;\r\n+import org.apache.dubbo.rpc.AsyncContextImpl;\r\n+import org.apache.dubbo.rpc.AsyncRpcResult;\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.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+\r\n+import java.lang.reflect.InvocationTargetException;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.CompletionException;\r\n+\r\n+/**\r\n+ * This Invoker works on provider side, delegates RPC to interface implementation.\r\n+ */\r\n+public abstract class AbstractProxyInvoker<T> implements Invoker<T> {\r\n+    Logger logger = LoggerFactory.getLogger(AbstractProxyInvoker.class);\r\n+\r\n+    private final T proxy;\r\n+\r\n+    private final Class<T> type;\r\n+\r\n+    private final URL url;\r\n+\r\n+    public AbstractProxyInvoker(T proxy, Class<T> type, URL url) {\r\n+        if (proxy == null) {\r\n+            throw new IllegalArgumentException(\"proxy == null\");\r\n+        }\r\n+        if (type == null) {\r\n+            throw new IllegalArgumentException(\"interface == null\");\r\n+        }\r\n+        if (!type.isInstance(proxy)) {\r\n+            throw new IllegalArgumentException(proxy.getClass().getName() + \" not implement interface \" + type);\r\n+        }\r\n+        this.proxy = proxy;\r\n+        this.type = type;\r\n+        this.url = url;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Class<T> getInterface() {\r\n+        return type;\r\n+    }\r\n+\r\n+    @Override\r\n+    public URL getUrl() {\r\n+        return url;\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean isAvailable() {\r\n+        return true;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+    }\r\n+\r\n+    @Override\r\n+    public Result invoke(Invocation invocation) throws RpcException {\r\n+        try {\r\n+            Object value = doInvoke(proxy, invocation.getMethodName(), invocation.getParameterTypes(), invocation.getArguments());\r\n+            CompletableFuture<Object> future = wrapWithFuture(value);\r\n+            CompletableFuture<AppResponse> appResponseFuture = future.handle((obj, t) -> {\r\n+                AppResponse result = new AppResponse(invocation);\r\n+                if (t != null) {\r\n+                    if (t instanceof CompletionException) {\r\n+                        result.setException(t.getCause());\r\n+                    } else {\r\n+                        result.setException(t);\r\n+                    }\r\n+                } else {\r\n+                    result.setValue(obj);\r\n+                }\r\n+                return result;\r\n+            });\r\n+            return new AsyncRpcResult(appResponseFuture, invocation);\r\n+        } catch (InvocationTargetException e) {\r\n+            if (RpcContext.getContext().isAsyncStarted() && !RpcContext.getContext().stopAsync()) {\r\n+                logger.error(\"Provider async started, but got an exception from the original method, cannot write the exception back to consumer because an async result may have returned the new thread.\", e);\r\n+            }\r\n+            return AsyncRpcResult.newDefaultAsyncResult(null, e.getTargetException(), invocation);\r\n+        } catch (Throwable e) {\r\n+            throw new RpcException(\"Failed to invoke remote proxy method \" + invocation.getMethodName() + \" to \" + getUrl() + \", cause: \" + e.getMessage(), e);\r\n+        }\r\n+    }\r\n+\r\n+\tprivate CompletableFuture<Object> wrapWithFuture(Object value) {\r\n+        if (RpcContext.getContext().isAsyncStarted()) {\r\n+            return ((AsyncContextImpl)(RpcContext.getContext().getAsyncContext())).getInternalFuture();\r\n+        } else if (value instanceof CompletableFuture) {\r\n+            return (CompletableFuture<Object>) value;\r\n+        }\r\n+        return CompletableFuture.completedFuture(value);\r\n+    }\r\n+\r\n+    protected abstract Object doInvoke(T proxy, String methodName, Class<?>[] parameterTypes, Object[] arguments) throws Throwable;\r\n+\r\n+    @Override\r\n+    public String toString() {\r\n+        return getInterface() + \" -> \" + (getUrl() == null ? \" \" : getUrl().toString());\r\n+    }\r\n+\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java", "source2": "org/apache/dubbo/rpc/proxy/InvokerInvocationHandler.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,98 +1,98 @@\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.proxy;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.rpc.Constants;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.RpcContext;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ConsumerModel;\n-\n-import java.lang.reflect.Field;\n-import java.lang.reflect.InvocationHandler;\n-import java.lang.reflect.Method;\n-\n-/**\n- * InvokerHandler\n- */\n-public class InvokerInvocationHandler implements InvocationHandler {\n-    private static final Logger logger = LoggerFactory.getLogger(InvokerInvocationHandler.class);\n-    private final Invoker<?> invoker;\n-    private ConsumerModel consumerModel;\n-    private URL url;\n-    private String protocolServiceKey;\n-\n-    public static Field stackTraceField;\n-\n-    static {\n-        try {\n-            stackTraceField = Throwable.class.getDeclaredField(\"stackTrace\");\n-            ReflectUtils.makeAccessible(stackTraceField);\n-        } catch (NoSuchFieldException e) {\n-            // ignore\n-        }\n-    }\n-\n-    public InvokerInvocationHandler(Invoker<?> handler) {\n-        this.invoker = handler;\n-        this.url = invoker.getUrl();\n-        String serviceKey = this.url.getServiceKey();\n-        this.protocolServiceKey = this.url.getProtocolServiceKey();\n-        if (serviceKey != null) {\n-            this.consumerModel = ApplicationModel.getConsumerModel(serviceKey);\n-        }\n-    }\n-\n-    @Override\n-    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\n-        if (method.getDeclaringClass() == Object.class) {\n-            return method.invoke(invoker, args);\n-        }\n-        String methodName = method.getName();\n-        Class<?>[] parameterTypes = method.getParameterTypes();\n-        if (parameterTypes.length == 0) {\n-            if (\"toString\".equals(methodName)) {\n-                return invoker.toString();\n-            } else if (\"$destroy\".equals(methodName)) {\n-                invoker.destroy();\n-                return null;\n-            } else if (\"hashCode\".equals(methodName)) {\n-                return invoker.hashCode();\n-            }\n-        } else if (parameterTypes.length == 1 && \"equals\".equals(methodName)) {\n-            return invoker.equals(args[0]);\n-        }\n-        RpcInvocation rpcInvocation = new RpcInvocation(method, invoker.getInterface().getName(), protocolServiceKey, args);\n-        String serviceKey = invoker.getUrl().getServiceKey();\n-        rpcInvocation.setTargetServiceUniqueName(serviceKey);\n-\n-        // invoker.getUrl() returns consumer url.\n-        RpcContext.setRpcContext(invoker.getUrl());\n-\n-        if (consumerModel != null) {\n-            rpcInvocation.put(Constants.CONSUMER_MODEL, consumerModel);\n-            rpcInvocation.put(Constants.METHOD_MODEL, consumerModel.getMethodModel(method));\n-        }\n-\n-        return invoker.invoke(rpcInvocation).recreate();\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.proxy;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.rpc.Constants;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ConsumerModel;\r\n+\r\n+import java.lang.reflect.Field;\r\n+import java.lang.reflect.InvocationHandler;\r\n+import java.lang.reflect.Method;\r\n+\r\n+/**\r\n+ * InvokerHandler\r\n+ */\r\n+public class InvokerInvocationHandler implements InvocationHandler {\r\n+    private static final Logger logger = LoggerFactory.getLogger(InvokerInvocationHandler.class);\r\n+    private final Invoker<?> invoker;\r\n+    private ConsumerModel consumerModel;\r\n+    private URL url;\r\n+    private String protocolServiceKey;\r\n+\r\n+    public static Field stackTraceField;\r\n+\r\n+    static {\r\n+        try {\r\n+            stackTraceField = Throwable.class.getDeclaredField(\"stackTrace\");\r\n+            ReflectUtils.makeAccessible(stackTraceField);\r\n+        } catch (NoSuchFieldException e) {\r\n+            // ignore\r\n+        }\r\n+    }\r\n+\r\n+    public InvokerInvocationHandler(Invoker<?> handler) {\r\n+        this.invoker = handler;\r\n+        this.url = invoker.getUrl();\r\n+        String serviceKey = this.url.getServiceKey();\r\n+        this.protocolServiceKey = this.url.getProtocolServiceKey();\r\n+        if (serviceKey != null) {\r\n+            this.consumerModel = ApplicationModel.getConsumerModel(serviceKey);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\r\n+        if (method.getDeclaringClass() == Object.class) {\r\n+            return method.invoke(invoker, args);\r\n+        }\r\n+        String methodName = method.getName();\r\n+        Class<?>[] parameterTypes = method.getParameterTypes();\r\n+        if (parameterTypes.length == 0) {\r\n+            if (\"toString\".equals(methodName)) {\r\n+                return invoker.toString();\r\n+            } else if (\"$destroy\".equals(methodName)) {\r\n+                invoker.destroy();\r\n+                return null;\r\n+            } else if (\"hashCode\".equals(methodName)) {\r\n+                return invoker.hashCode();\r\n+            }\r\n+        } else if (parameterTypes.length == 1 && \"equals\".equals(methodName)) {\r\n+            return invoker.equals(args[0]);\r\n+        }\r\n+        RpcInvocation rpcInvocation = new RpcInvocation(method, invoker.getInterface().getName(), protocolServiceKey, args);\r\n+        String serviceKey = invoker.getUrl().getServiceKey();\r\n+        rpcInvocation.setTargetServiceUniqueName(serviceKey);\r\n+\r\n+        // invoker.getUrl() returns consumer url.\r\n+        RpcContext.setRpcContext(invoker.getUrl());\r\n+\r\n+        if (consumerModel != null) {\r\n+            rpcInvocation.put(Constants.CONSUMER_MODEL, consumerModel);\r\n+            rpcInvocation.put(Constants.METHOD_MODEL, consumerModel.getMethodModel(method));\r\n+        }\r\n+\r\n+        return invoker.invoke(rpcInvocation).recreate();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java", "source2": "org/apache/dubbo/rpc/proxy/javassist/JavassistProxyFactory.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,52 +1,52 @@\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.proxy.javassist;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.bytecode.Proxy;\n-import org.apache.dubbo.common.bytecode.Wrapper;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.proxy.AbstractProxyFactory;\n-import org.apache.dubbo.rpc.proxy.AbstractProxyInvoker;\n-import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler;\n-\n-/**\n- * JavassistRpcProxyFactory\n- */\n-public class JavassistProxyFactory extends AbstractProxyFactory {\n-\n-    @Override\n-    @SuppressWarnings(\"unchecked\")\n-    public <T> T getProxy(Invoker<T> invoker, Class<?>[] interfaces) {\n-        return (T) Proxy.getProxy(interfaces).newInstance(new InvokerInvocationHandler(invoker));\n-    }\n-\n-    @Override\n-    public <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) {\n-        // TODO Wrapper cannot handle this scenario correctly: the classname contains '$'\n-        final Wrapper wrapper = Wrapper.getWrapper(proxy.getClass().getName().indexOf('$') < 0 ? proxy.getClass() : type);\n-        return new AbstractProxyInvoker<T>(proxy, type, url) {\n-            @Override\n-            protected Object doInvoke(T proxy, String methodName,\n-                                      Class<?>[] parameterTypes,\n-                                      Object[] arguments) throws Throwable {\n-                return wrapper.invokeMethod(proxy, methodName, parameterTypes, arguments);\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.proxy.javassist;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.bytecode.Proxy;\r\n+import org.apache.dubbo.common.bytecode.Wrapper;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.proxy.AbstractProxyFactory;\r\n+import org.apache.dubbo.rpc.proxy.AbstractProxyInvoker;\r\n+import org.apache.dubbo.rpc.proxy.InvokerInvocationHandler;\r\n+\r\n+/**\r\n+ * JavassistRpcProxyFactory\r\n+ */\r\n+public class JavassistProxyFactory extends AbstractProxyFactory {\r\n+\r\n+    @Override\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public <T> T getProxy(Invoker<T> invoker, Class<?>[] interfaces) {\r\n+        return (T) Proxy.getProxy(interfaces).newInstance(new InvokerInvocationHandler(invoker));\r\n+    }\r\n+\r\n+    @Override\r\n+    public <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) {\r\n+        // TODO Wrapper cannot handle this scenario correctly: the classname contains '$'\r\n+        final Wrapper wrapper = Wrapper.getWrapper(proxy.getClass().getName().indexOf('$') < 0 ? proxy.getClass() : type);\r\n+        return new AbstractProxyInvoker<T>(proxy, type, url) {\r\n+            @Override\r\n+            protected Object doInvoke(T proxy, String methodName,\r\n+                                      Class<?>[] parameterTypes,\r\n+                                      Object[] arguments) throws Throwable {\r\n+                return wrapper.invokeMethod(proxy, methodName, parameterTypes, arguments);\r\n+            }\r\n+        };\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/support/AccessLogData.java", "source2": "org/apache/dubbo/rpc/support/AccessLogData.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,281 +1,281 @@\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.support;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.RpcContext;\n-\n-import com.alibaba.fastjson.JSON;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\n-\n-import java.text.DateFormat;\n-import java.text.SimpleDateFormat;\n-import java.util.Arrays;\n-import java.util.Date;\n-import java.util.HashMap;\n-import java.util.Map;\n-\n-/**\n- * AccessLogData is a container for log event data. In internally uses map and store each filed of log as value. It\n- * does not generate any dynamic value e.g. time stamp, local jmv machine host address etc. It does not allow any null\n- * or empty key.\n- *\n- * Note: since its date formatter is a singleton, make sure to run it in single thread only.\n- */\n-public final class AccessLogData {\n-\n-    private static final String MESSAGE_DATE_FORMAT = \"yyyy-MM-dd HH:mm:ss\";\n-    private static final DateFormat MESSAGE_DATE_FORMATTER = new SimpleDateFormat(MESSAGE_DATE_FORMAT);\n-\n-    private static final String VERSION = \"version\";\n-    private static final String GROUP = \"group\";\n-    private static final String SERVICE = \"service\";\n-    private static final String METHOD_NAME = \"method-name\";\n-    private static final String INVOCATION_TIME = \"invocation-time\";\n-    private static final String TYPES = \"types\";\n-    private static final String ARGUMENTS = \"arguments\";\n-    private static final String REMOTE_HOST = \"remote-host\";\n-    private static final String REMOTE_PORT = \"remote-port\";\n-    private static final String LOCAL_HOST = \"localhost\";\n-    private static final String LOCAL_PORT = \"local-port\";\n-\n-    /**\n-     * This is used to store log data in key val format.\n-     */\n-    private Map<String, Object> data;\n-\n-    /**\n-     * Default constructor.\n-     */\n-    private AccessLogData() {\n-        RpcContext context = RpcContext.getContext();\n-        data = new HashMap<>();\n-        setLocalHost(context.getLocalHost());\n-        setLocalPort(context.getLocalPort());\n-        setRemoteHost(context.getRemoteHost());\n-        setRemotePort(context.getRemotePort());\n-    }\n-\n-    /**\n-     * Get new instance of log data.\n-     *\n-     * @return instance of AccessLogData\n-     */\n-    public static AccessLogData newLogData() {\n-        return new AccessLogData();\n-    }\n-\n-\n-    /**\n-     * Add version information.\n-     *\n-     * @param version\n-     */\n-    public void setVersion(String version) {\n-        set(VERSION, version);\n-    }\n-\n-    /**\n-     * Add service name.\n-     *\n-     * @param serviceName\n-     */\n-    public void setServiceName(String serviceName) {\n-        set(SERVICE, serviceName);\n-    }\n-\n-    /**\n-     * Add group name\n-     *\n-     * @param group\n-     */\n-    public void setGroup(String group) {\n-        set(GROUP, group);\n-    }\n-\n-    /**\n-     * Set the invocation date. As an argument it accept date string.\n-     *\n-     * @param invocationTime\n-     */\n-    public void setInvocationTime(Date invocationTime) {\n-        set(INVOCATION_TIME, invocationTime);\n-    }\n-\n-    /**\n-     * Set caller remote host\n-     *\n-     * @param remoteHost\n-     */\n-    private void setRemoteHost(String remoteHost) {\n-        set(REMOTE_HOST, remoteHost);\n-    }\n-\n-    /**\n-     * Set caller remote port.\n-     *\n-     * @param remotePort\n-     */\n-    private void setRemotePort(Integer remotePort) {\n-        set(REMOTE_PORT, remotePort);\n-    }\n-\n-    /**\n-     * Set local host\n-     *\n-     * @param localHost\n-     */\n-    private void setLocalHost(String localHost) {\n-        set(LOCAL_HOST, localHost);\n-    }\n-\n-    /**\n-     * Set local port of exported service\n-     *\n-     * @param localPort\n-     */\n-    private void setLocalPort(Integer localPort) {\n-        set(LOCAL_PORT, localPort);\n-    }\n-\n-    /**\n-     * Set target method name.\n-     *\n-     * @param methodName\n-     */\n-    public void setMethodName(String methodName) {\n-        set(METHOD_NAME, methodName);\n-    }\n-\n-    /**\n-     * Set invocation's method's input parameter's types\n-     *\n-     * @param types\n-     */\n-    public void setTypes(Class[] types) {\n-        set(TYPES, types != null ? Arrays.copyOf(types, types.length) : null);\n-    }\n-\n-    /**\n-     * Sets invocation arguments\n-     *\n-     * @param arguments\n-     */\n-    public void setArguments(Object[] arguments) {\n-        set(ARGUMENTS, arguments != null ? Arrays.copyOf(arguments, arguments.length) : null);\n-    }\n-\n-    /**\n-     * Return gthe service of access log entry\n-     *\n-     * @return\n-     */\n-    public String getServiceName() {\n-        return get(SERVICE).toString();\n-    }\n-\n-\n-    public String getLogMessage() {\n-        StringBuilder sn = new StringBuilder();\n-\n-        sn.append(\"[\")\n-                .append(MESSAGE_DATE_FORMATTER.format(getInvocationTime()))\n-                .append(\"] \")\n-                .append(get(REMOTE_HOST))\n-                .append(\":\")\n-                .append(get(REMOTE_PORT))\n-                .append(\" -> \")\n-                .append(get(LOCAL_HOST))\n-                .append(\":\")\n-                .append(get(LOCAL_PORT))\n-                .append(\" - \");\n-\n-        String group = get(GROUP) != null ? get(GROUP).toString() : \"\";\n-        if (StringUtils.isNotEmpty(group)) {\n-            sn.append(group).append(\"/\");\n-        }\n-\n-        sn.append(get(SERVICE));\n-\n-        String version = get(VERSION) != null ? get(VERSION).toString() : \"\";\n-        if (StringUtils.isNotEmpty(version)) {\n-            sn.append(\":\").append(version);\n-        }\n-\n-        sn.append(\" \");\n-        sn.append(get(METHOD_NAME));\n-\n-        sn.append(\"(\");\n-        Class<?>[] types = get(TYPES) != null ? (Class<?>[]) get(TYPES) : new Class[0];\n-        boolean first = true;\n-        for (Class<?> type : types) {\n-            if (first) {\n-                first = false;\n-            } else {\n-                sn.append(\",\");\n-            }\n-            sn.append(type.getName());\n-        }\n-        sn.append(\") \");\n-\n-\n-        Object[] args = get(ARGUMENTS) != null ? (Object[]) get(ARGUMENTS) : null;\n-        if (args != null && args.length > 0) {\n-            sn.append(JSON.toJSONString(args));\n-        }\n-\n-        return sn.toString();\n-    }\n-\n-    private Date getInvocationTime() {\n-        return (Date)get(INVOCATION_TIME);\n-    }\n-    /**\n-     * Return value of key\n-     *\n-     * @param key\n-     * @return\n-     */\n-    private Object get(String key) {\n-        return data.get(key);\n-    }\n-\n-    /**\n-     * Add log key along with his value.\n-     *\n-     * @param key   Any not null or non empty string\n-     * @param value Any object including null.\n-     */\n-    private void set(String key, Object value) {\n-        data.put(key, value);\n-    }\n-    \n-    public void buildAccessLogData(Invoker<?> invoker, Invocation inv) {\n-        setServiceName(invoker.getInterface().getName());\n-        setMethodName(inv.getMethodName());\n-        setVersion(invoker.getUrl().getParameter(VERSION_KEY));\n-        setGroup(invoker.getUrl().getParameter(GROUP_KEY));\n-        setInvocationTime(new Date());\n-        setTypes(inv.getParameterTypes());\n-        setArguments(inv.getArguments());\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.support;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+\r\n+import com.alibaba.fastjson.JSON;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;\r\n+\r\n+import java.text.DateFormat;\r\n+import java.text.SimpleDateFormat;\r\n+import java.util.Arrays;\r\n+import java.util.Date;\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * AccessLogData is a container for log event data. In internally uses map and store each filed of log as value. It\r\n+ * does not generate any dynamic value e.g. time stamp, local jmv machine host address etc. It does not allow any null\r\n+ * or empty key.\r\n+ *\r\n+ * Note: since its date formatter is a singleton, make sure to run it in single thread only.\r\n+ */\r\n+public final class AccessLogData {\r\n+\r\n+    private static final String MESSAGE_DATE_FORMAT = \"yyyy-MM-dd HH:mm:ss\";\r\n+    private static final DateFormat MESSAGE_DATE_FORMATTER = new SimpleDateFormat(MESSAGE_DATE_FORMAT);\r\n+\r\n+    private static final String VERSION = \"version\";\r\n+    private static final String GROUP = \"group\";\r\n+    private static final String SERVICE = \"service\";\r\n+    private static final String METHOD_NAME = \"method-name\";\r\n+    private static final String INVOCATION_TIME = \"invocation-time\";\r\n+    private static final String TYPES = \"types\";\r\n+    private static final String ARGUMENTS = \"arguments\";\r\n+    private static final String REMOTE_HOST = \"remote-host\";\r\n+    private static final String REMOTE_PORT = \"remote-port\";\r\n+    private static final String LOCAL_HOST = \"localhost\";\r\n+    private static final String LOCAL_PORT = \"local-port\";\r\n+\r\n+    /**\r\n+     * This is used to store log data in key val format.\r\n+     */\r\n+    private Map<String, Object> data;\r\n+\r\n+    /**\r\n+     * Default constructor.\r\n+     */\r\n+    private AccessLogData() {\r\n+        RpcContext context = RpcContext.getContext();\r\n+        data = new HashMap<>();\r\n+        setLocalHost(context.getLocalHost());\r\n+        setLocalPort(context.getLocalPort());\r\n+        setRemoteHost(context.getRemoteHost());\r\n+        setRemotePort(context.getRemotePort());\r\n+    }\r\n+\r\n+    /**\r\n+     * Get new instance of log data.\r\n+     *\r\n+     * @return instance of AccessLogData\r\n+     */\r\n+    public static AccessLogData newLogData() {\r\n+        return new AccessLogData();\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * Add version information.\r\n+     *\r\n+     * @param version\r\n+     */\r\n+    public void setVersion(String version) {\r\n+        set(VERSION, version);\r\n+    }\r\n+\r\n+    /**\r\n+     * Add service name.\r\n+     *\r\n+     * @param serviceName\r\n+     */\r\n+    public void setServiceName(String serviceName) {\r\n+        set(SERVICE, serviceName);\r\n+    }\r\n+\r\n+    /**\r\n+     * Add group name\r\n+     *\r\n+     * @param group\r\n+     */\r\n+    public void setGroup(String group) {\r\n+        set(GROUP, group);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set the invocation date. As an argument it accept date string.\r\n+     *\r\n+     * @param invocationTime\r\n+     */\r\n+    public void setInvocationTime(Date invocationTime) {\r\n+        set(INVOCATION_TIME, invocationTime);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set caller remote host\r\n+     *\r\n+     * @param remoteHost\r\n+     */\r\n+    private void setRemoteHost(String remoteHost) {\r\n+        set(REMOTE_HOST, remoteHost);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set caller remote port.\r\n+     *\r\n+     * @param remotePort\r\n+     */\r\n+    private void setRemotePort(Integer remotePort) {\r\n+        set(REMOTE_PORT, remotePort);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set local host\r\n+     *\r\n+     * @param localHost\r\n+     */\r\n+    private void setLocalHost(String localHost) {\r\n+        set(LOCAL_HOST, localHost);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set local port of exported service\r\n+     *\r\n+     * @param localPort\r\n+     */\r\n+    private void setLocalPort(Integer localPort) {\r\n+        set(LOCAL_PORT, localPort);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set target method name.\r\n+     *\r\n+     * @param methodName\r\n+     */\r\n+    public void setMethodName(String methodName) {\r\n+        set(METHOD_NAME, methodName);\r\n+    }\r\n+\r\n+    /**\r\n+     * Set invocation's method's input parameter's types\r\n+     *\r\n+     * @param types\r\n+     */\r\n+    public void setTypes(Class[] types) {\r\n+        set(TYPES, types != null ? Arrays.copyOf(types, types.length) : null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Sets invocation arguments\r\n+     *\r\n+     * @param arguments\r\n+     */\r\n+    public void setArguments(Object[] arguments) {\r\n+        set(ARGUMENTS, arguments != null ? Arrays.copyOf(arguments, arguments.length) : null);\r\n+    }\r\n+\r\n+    /**\r\n+     * Return gthe service of access log entry\r\n+     *\r\n+     * @return\r\n+     */\r\n+    public String getServiceName() {\r\n+        return get(SERVICE).toString();\r\n+    }\r\n+\r\n+\r\n+    public String getLogMessage() {\r\n+        StringBuilder sn = new StringBuilder();\r\n+\r\n+        sn.append(\"[\")\r\n+                .append(MESSAGE_DATE_FORMATTER.format(getInvocationTime()))\r\n+                .append(\"] \")\r\n+                .append(get(REMOTE_HOST))\r\n+                .append(\":\")\r\n+                .append(get(REMOTE_PORT))\r\n+                .append(\" -> \")\r\n+                .append(get(LOCAL_HOST))\r\n+                .append(\":\")\r\n+                .append(get(LOCAL_PORT))\r\n+                .append(\" - \");\r\n+\r\n+        String group = get(GROUP) != null ? get(GROUP).toString() : \"\";\r\n+        if (StringUtils.isNotEmpty(group)) {\r\n+            sn.append(group).append(\"/\");\r\n+        }\r\n+\r\n+        sn.append(get(SERVICE));\r\n+\r\n+        String version = get(VERSION) != null ? get(VERSION).toString() : \"\";\r\n+        if (StringUtils.isNotEmpty(version)) {\r\n+            sn.append(\":\").append(version);\r\n+        }\r\n+\r\n+        sn.append(\" \");\r\n+        sn.append(get(METHOD_NAME));\r\n+\r\n+        sn.append(\"(\");\r\n+        Class<?>[] types = get(TYPES) != null ? (Class<?>[]) get(TYPES) : new Class[0];\r\n+        boolean first = true;\r\n+        for (Class<?> type : types) {\r\n+            if (first) {\r\n+                first = false;\r\n+            } else {\r\n+                sn.append(\",\");\r\n+            }\r\n+            sn.append(type.getName());\r\n+        }\r\n+        sn.append(\") \");\r\n+\r\n+\r\n+        Object[] args = get(ARGUMENTS) != null ? (Object[]) get(ARGUMENTS) : null;\r\n+        if (args != null && args.length > 0) {\r\n+            sn.append(JSON.toJSONString(args));\r\n+        }\r\n+\r\n+        return sn.toString();\r\n+    }\r\n+\r\n+    private Date getInvocationTime() {\r\n+        return (Date)get(INVOCATION_TIME);\r\n+    }\r\n+    /**\r\n+     * Return value of key\r\n+     *\r\n+     * @param key\r\n+     * @return\r\n+     */\r\n+    private Object get(String key) {\r\n+        return data.get(key);\r\n+    }\r\n+\r\n+    /**\r\n+     * Add log key along with his value.\r\n+     *\r\n+     * @param key   Any not null or non empty string\r\n+     * @param value Any object including null.\r\n+     */\r\n+    private void set(String key, Object value) {\r\n+        data.put(key, value);\r\n+    }\r\n+    \r\n+    public void buildAccessLogData(Invoker<?> invoker, Invocation inv) {\r\n+        setServiceName(invoker.getInterface().getName());\r\n+        setMethodName(inv.getMethodName());\r\n+        setVersion(invoker.getUrl().getParameter(VERSION_KEY));\r\n+        setGroup(invoker.getUrl().getParameter(GROUP_KEY));\r\n+        setInvocationTime(new Date());\r\n+        setTypes(inv.getParameterTypes());\r\n+        setArguments(inv.getArguments());\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/support/RpcUtils.java", "source2": "org/apache/dubbo/rpc/support/RpcUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,273 +1,273 @@\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.support;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.Invocation;\n-import org.apache.dubbo.rpc.InvokeMode;\n-import org.apache.dubbo.rpc.RpcContext;\n-import org.apache.dubbo.rpc.RpcInvocation;\n-import org.apache.dubbo.rpc.service.GenericService;\n-\n-import java.lang.reflect.Method;\n-import java.lang.reflect.Type;\n-import java.util.concurrent.CompletableFuture;\n-import java.util.concurrent.atomic.AtomicLong;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\n-import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;\n-import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_PARAMETER_DESC;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_ATTACHMENT_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\n-import static org.apache.dubbo.rpc.Constants.$ECHO;\n-import static org.apache.dubbo.rpc.Constants.$ECHO_PARAMETER_DESC;\n-import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\n-import static org.apache.dubbo.rpc.Constants.AUTO_ATTACH_INVOCATIONID_KEY;\n-import static org.apache.dubbo.rpc.Constants.ID_KEY;\n-import static org.apache.dubbo.rpc.Constants.RETURN_KEY;\n-\n-/**\n- * RpcUtils\n- */\n-public class RpcUtils {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(RpcUtils.class);\n-    private static final AtomicLong INVOKE_ID = new AtomicLong(0);\n-\n-    public static Class<?> getReturnType(Invocation invocation) {\n-        try {\n-            if (invocation != null && invocation.getInvoker() != null\n-                    && invocation.getInvoker().getUrl() != null\n-                    && invocation.getInvoker().getInterface() != GenericService.class\n-                    && !invocation.getMethodName().startsWith(\"$\")) {\n-                String service = invocation.getInvoker().getUrl().getServiceInterface();\n-                if (StringUtils.isNotEmpty(service)) {\n-                    Method method = getMethodByService(invocation, service);\n-                    return method.getReturnType();\n-                }\n-            }\n-        } catch (Throwable t) {\n-            logger.warn(t.getMessage(), t);\n-        }\n-        return null;\n-    }\n-\n-    public static Type[] getReturnTypes(Invocation invocation) {\n-        try {\n-            if (invocation != null && invocation.getInvoker() != null\n-                    && invocation.getInvoker().getUrl() != null\n-                    && invocation.getInvoker().getInterface() != GenericService.class\n-                    && !invocation.getMethodName().startsWith(\"$\")) {\n-                String service = invocation.getInvoker().getUrl().getServiceInterface();\n-                if (StringUtils.isNotEmpty(service)) {\n-                    Method method = getMethodByService(invocation, service);\n-                    return ReflectUtils.getReturnTypes(method);\n-                }\n-            }\n-        } catch (Throwable t) {\n-            logger.warn(t.getMessage(), t);\n-        }\n-        return null;\n-    }\n-\n-    public static Long getInvocationId(Invocation inv) {\n-        String id = inv.getAttachment(ID_KEY);\n-        return id == null ? null : new Long(id);\n-    }\n-\n-    /**\n-     * Idempotent operation: invocation id will be added in async operation by default\n-     *\n-     * @param url\n-     * @param inv\n-     */\n-    public static void attachInvocationIdIfAsync(URL url, Invocation inv) {\n-        if (isAttachInvocationId(url, inv) && getInvocationId(inv) == null && inv instanceof RpcInvocation) {\n-            inv.setAttachment(ID_KEY, String.valueOf(INVOKE_ID.getAndIncrement()));\n-        }\n-    }\n-\n-    private static boolean isAttachInvocationId(URL url, Invocation invocation) {\n-        String value = url.getMethodParameter(invocation.getMethodName(), AUTO_ATTACH_INVOCATIONID_KEY);\n-        if (value == null) {\n-            // add invocationid in async operation by default\n-            return isAsync(url, invocation);\n-        } else if (Boolean.TRUE.toString().equalsIgnoreCase(value)) {\n-            return true;\n-        } else {\n-            return false;\n-        }\n-    }\n-\n-    public static String getMethodName(Invocation invocation) {\n-        if ($INVOKE.equals(invocation.getMethodName())\n-                && invocation.getArguments() != null\n-                && invocation.getArguments().length > 0\n-                && invocation.getArguments()[0] instanceof String) {\n-            return (String) invocation.getArguments()[0];\n-        }\n-        return invocation.getMethodName();\n-    }\n-\n-    public static Object[] getArguments(Invocation invocation) {\n-        if ($INVOKE.equals(invocation.getMethodName())\n-                && invocation.getArguments() != null\n-                && invocation.getArguments().length > 2\n-                && invocation.getArguments()[2] instanceof Object[]) {\n-            return (Object[]) invocation.getArguments()[2];\n-        }\n-        return invocation.getArguments();\n-    }\n-\n-    public static Class<?>[] getParameterTypes(Invocation invocation) {\n-        if ($INVOKE.equals(invocation.getMethodName())\n-                && invocation.getArguments() != null\n-                && invocation.getArguments().length > 1\n-                && invocation.getArguments()[1] instanceof String[]) {\n-            String[] types = (String[]) invocation.getArguments()[1];\n-            if (types == null) {\n-                return new Class<?>[0];\n-            }\n-            Class<?>[] parameterTypes = new Class<?>[types.length];\n-            for (int i = 0; i < types.length; i++) {\n-                parameterTypes[i] = ReflectUtils.forName(types[0]);\n-            }\n-            return parameterTypes;\n-        }\n-        return invocation.getParameterTypes();\n-    }\n-\n-    public static boolean isAsync(URL url, Invocation inv) {\n-        boolean isAsync;\n-\n-        if (inv instanceof RpcInvocation) {\n-            RpcInvocation rpcInvocation = (RpcInvocation) inv;\n-            if (rpcInvocation.getInvokeMode() != null) {\n-                return rpcInvocation.getInvokeMode() == InvokeMode.ASYNC;\n-            }\n-        }\n-\n-        if (Boolean.TRUE.toString().equals(inv.getAttachment(ASYNC_KEY))) {\n-            isAsync = true;\n-        } else {\n-            isAsync = url.getMethodParameter(getMethodName(inv), ASYNC_KEY, false);\n-        }\n-        return isAsync;\n-    }\n-\n-    public static boolean isReturnTypeFuture(Invocation inv) {\n-        Class<?> clazz;\n-        if (inv instanceof RpcInvocation) {\n-            clazz = ((RpcInvocation) inv).getReturnType();\n-        } else {\n-            clazz = getReturnType(inv);\n-        }\n-        return (clazz != null && CompletableFuture.class.isAssignableFrom(clazz)) || isGenericAsync(inv);\n-    }\n-\n-    public static boolean isGenericAsync(Invocation inv) {\n-        return $INVOKE_ASYNC.equals(inv.getMethodName());\n-    }\n-\n-    // check parameterTypesDesc to fix CVE-2020-1948\n-    public static boolean isGenericCall(String parameterTypesDesc, String method) {\n-        return ($INVOKE.equals(method) || $INVOKE_ASYNC.equals(method)) && GENERIC_PARAMETER_DESC.equals(parameterTypesDesc);\n-    }\n-\n-    // check parameterTypesDesc to fix CVE-2020-1948\n-    public static boolean isEcho(String parameterTypesDesc, String method) {\n-        return $ECHO.equals(method) && $ECHO_PARAMETER_DESC.equals(parameterTypesDesc);\n-    }\n-\n-    public static InvokeMode getInvokeMode(URL url, Invocation inv) {\n-        if (inv instanceof RpcInvocation) {\n-            RpcInvocation rpcInvocation = (RpcInvocation) inv;\n-            if (rpcInvocation.getInvokeMode() != null) {\n-                return rpcInvocation.getInvokeMode();\n-            }\n-        }\n-\n-        if (isReturnTypeFuture(inv)) {\n-            return InvokeMode.FUTURE;\n-        } else if (isAsync(url, inv)) {\n-            return InvokeMode.ASYNC;\n-        } else {\n-            return InvokeMode.SYNC;\n-        }\n-    }\n-\n-    public static boolean isOneway(URL url, Invocation inv) {\n-        boolean isOneway;\n-        if (Boolean.FALSE.toString().equals(inv.getAttachment(RETURN_KEY))) {\n-            isOneway = true;\n-        } else {\n-            isOneway = !url.getMethodParameter(getMethodName(inv), RETURN_KEY, true);\n-        }\n-        return isOneway;\n-    }\n-\n-    private static Method getMethodByService(Invocation invocation, String service) throws NoSuchMethodException {\n-        Class<?> invokerInterface = invocation.getInvoker().getInterface();\n-        Class<?> cls = invokerInterface != null ? ReflectUtils.forName(invokerInterface.getClassLoader(), service)\n-                : ReflectUtils.forName(service);\n-        Method method = cls.getMethod(invocation.getMethodName(), invocation.getParameterTypes());\n-        if (method.getReturnType() == void.class) {\n-            return null;\n-        }\n-        return method;\n-    }\n-\n-    public static long getTimeout(Invocation invocation, long defaultTimeout) {\n-        long timeout = defaultTimeout;\n-        Object genericTimeout = invocation.getObjectAttachment(TIMEOUT_ATTACHMENT_KEY);\n-        if (genericTimeout != null) {\n-            timeout = convertToNumber(genericTimeout, defaultTimeout);\n-        }\n-        return timeout;\n-    }\n-\n-    public static long getTimeout(URL url, String methodName, RpcContext context, long defaultTimeout) {\n-        long timeout = defaultTimeout;\n-        Object genericTimeout = context.getObjectAttachment(TIMEOUT_KEY);\n-        if (genericTimeout != null) {\n-            timeout = convertToNumber(genericTimeout, defaultTimeout);\n-        } else if (url != null) {\n-            timeout = url.getMethodPositiveParameter(methodName, TIMEOUT_KEY, defaultTimeout);\n-        }\n-        return timeout;\n-    }\n-\n-    private static long convertToNumber(Object obj, long defaultTimeout) {\n-        long timeout = 0;\n-        try {\n-            if (obj instanceof String) {\n-                timeout = Long.parseLong((String) obj);\n-            } else if (obj instanceof Number) {\n-                timeout = ((Number) obj).longValue();\n-            } else {\n-                timeout = Long.parseLong(obj.toString());\n-            }\n-        } catch (Exception e) {\n-            // ignore\n-        }\n-        return timeout;\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.support;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.Invocation;\r\n+import org.apache.dubbo.rpc.InvokeMode;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcInvocation;\r\n+import org.apache.dubbo.rpc.service.GenericService;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.lang.reflect.Type;\r\n+import java.util.concurrent.CompletableFuture;\r\n+import java.util.concurrent.atomic.AtomicLong;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.$INVOKE_ASYNC;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.GENERIC_PARAMETER_DESC;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_ATTACHMENT_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.$ECHO;\r\n+import static org.apache.dubbo.rpc.Constants.$ECHO_PARAMETER_DESC;\r\n+import static org.apache.dubbo.rpc.Constants.ASYNC_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.AUTO_ATTACH_INVOCATIONID_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.ID_KEY;\r\n+import static org.apache.dubbo.rpc.Constants.RETURN_KEY;\r\n+\r\n+/**\r\n+ * RpcUtils\r\n+ */\r\n+public class RpcUtils {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(RpcUtils.class);\r\n+    private static final AtomicLong INVOKE_ID = new AtomicLong(0);\r\n+\r\n+    public static Class<?> getReturnType(Invocation invocation) {\r\n+        try {\r\n+            if (invocation != null && invocation.getInvoker() != null\r\n+                    && invocation.getInvoker().getUrl() != null\r\n+                    && invocation.getInvoker().getInterface() != GenericService.class\r\n+                    && !invocation.getMethodName().startsWith(\"$\")) {\r\n+                String service = invocation.getInvoker().getUrl().getServiceInterface();\r\n+                if (StringUtils.isNotEmpty(service)) {\r\n+                    Method method = getMethodByService(invocation, service);\r\n+                    return method.getReturnType();\r\n+                }\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            logger.warn(t.getMessage(), t);\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    public static Type[] getReturnTypes(Invocation invocation) {\r\n+        try {\r\n+            if (invocation != null && invocation.getInvoker() != null\r\n+                    && invocation.getInvoker().getUrl() != null\r\n+                    && invocation.getInvoker().getInterface() != GenericService.class\r\n+                    && !invocation.getMethodName().startsWith(\"$\")) {\r\n+                String service = invocation.getInvoker().getUrl().getServiceInterface();\r\n+                if (StringUtils.isNotEmpty(service)) {\r\n+                    Method method = getMethodByService(invocation, service);\r\n+                    return ReflectUtils.getReturnTypes(method);\r\n+                }\r\n+            }\r\n+        } catch (Throwable t) {\r\n+            logger.warn(t.getMessage(), t);\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    public static Long getInvocationId(Invocation inv) {\r\n+        String id = inv.getAttachment(ID_KEY);\r\n+        return id == null ? null : new Long(id);\r\n+    }\r\n+\r\n+    /**\r\n+     * Idempotent operation: invocation id will be added in async operation by default\r\n+     *\r\n+     * @param url\r\n+     * @param inv\r\n+     */\r\n+    public static void attachInvocationIdIfAsync(URL url, Invocation inv) {\r\n+        if (isAttachInvocationId(url, inv) && getInvocationId(inv) == null && inv instanceof RpcInvocation) {\r\n+            inv.setAttachment(ID_KEY, String.valueOf(INVOKE_ID.getAndIncrement()));\r\n+        }\r\n+    }\r\n+\r\n+    private static boolean isAttachInvocationId(URL url, Invocation invocation) {\r\n+        String value = url.getMethodParameter(invocation.getMethodName(), AUTO_ATTACH_INVOCATIONID_KEY);\r\n+        if (value == null) {\r\n+            // add invocationid in async operation by default\r\n+            return isAsync(url, invocation);\r\n+        } else if (Boolean.TRUE.toString().equalsIgnoreCase(value)) {\r\n+            return true;\r\n+        } else {\r\n+            return false;\r\n+        }\r\n+    }\r\n+\r\n+    public static String getMethodName(Invocation invocation) {\r\n+        if ($INVOKE.equals(invocation.getMethodName())\r\n+                && invocation.getArguments() != null\r\n+                && invocation.getArguments().length > 0\r\n+                && invocation.getArguments()[0] instanceof String) {\r\n+            return (String) invocation.getArguments()[0];\r\n+        }\r\n+        return invocation.getMethodName();\r\n+    }\r\n+\r\n+    public static Object[] getArguments(Invocation invocation) {\r\n+        if ($INVOKE.equals(invocation.getMethodName())\r\n+                && invocation.getArguments() != null\r\n+                && invocation.getArguments().length > 2\r\n+                && invocation.getArguments()[2] instanceof Object[]) {\r\n+            return (Object[]) invocation.getArguments()[2];\r\n+        }\r\n+        return invocation.getArguments();\r\n+    }\r\n+\r\n+    public static Class<?>[] getParameterTypes(Invocation invocation) {\r\n+        if ($INVOKE.equals(invocation.getMethodName())\r\n+                && invocation.getArguments() != null\r\n+                && invocation.getArguments().length > 1\r\n+                && invocation.getArguments()[1] instanceof String[]) {\r\n+            String[] types = (String[]) invocation.getArguments()[1];\r\n+            if (types == null) {\r\n+                return new Class<?>[0];\r\n+            }\r\n+            Class<?>[] parameterTypes = new Class<?>[types.length];\r\n+            for (int i = 0; i < types.length; i++) {\r\n+                parameterTypes[i] = ReflectUtils.forName(types[0]);\r\n+            }\r\n+            return parameterTypes;\r\n+        }\r\n+        return invocation.getParameterTypes();\r\n+    }\r\n+\r\n+    public static boolean isAsync(URL url, Invocation inv) {\r\n+        boolean isAsync;\r\n+\r\n+        if (inv instanceof RpcInvocation) {\r\n+            RpcInvocation rpcInvocation = (RpcInvocation) inv;\r\n+            if (rpcInvocation.getInvokeMode() != null) {\r\n+                return rpcInvocation.getInvokeMode() == InvokeMode.ASYNC;\r\n+            }\r\n+        }\r\n+\r\n+        if (Boolean.TRUE.toString().equals(inv.getAttachment(ASYNC_KEY))) {\r\n+            isAsync = true;\r\n+        } else {\r\n+            isAsync = url.getMethodParameter(getMethodName(inv), ASYNC_KEY, false);\r\n+        }\r\n+        return isAsync;\r\n+    }\r\n+\r\n+    public static boolean isReturnTypeFuture(Invocation inv) {\r\n+        Class<?> clazz;\r\n+        if (inv instanceof RpcInvocation) {\r\n+            clazz = ((RpcInvocation) inv).getReturnType();\r\n+        } else {\r\n+            clazz = getReturnType(inv);\r\n+        }\r\n+        return (clazz != null && CompletableFuture.class.isAssignableFrom(clazz)) || isGenericAsync(inv);\r\n+    }\r\n+\r\n+    public static boolean isGenericAsync(Invocation inv) {\r\n+        return $INVOKE_ASYNC.equals(inv.getMethodName());\r\n+    }\r\n+\r\n+    // check parameterTypesDesc to fix CVE-2020-1948\r\n+    public static boolean isGenericCall(String parameterTypesDesc, String method) {\r\n+        return ($INVOKE.equals(method) || $INVOKE_ASYNC.equals(method)) && GENERIC_PARAMETER_DESC.equals(parameterTypesDesc);\r\n+    }\r\n+\r\n+    // check parameterTypesDesc to fix CVE-2020-1948\r\n+    public static boolean isEcho(String parameterTypesDesc, String method) {\r\n+        return $ECHO.equals(method) && $ECHO_PARAMETER_DESC.equals(parameterTypesDesc);\r\n+    }\r\n+\r\n+    public static InvokeMode getInvokeMode(URL url, Invocation inv) {\r\n+        if (inv instanceof RpcInvocation) {\r\n+            RpcInvocation rpcInvocation = (RpcInvocation) inv;\r\n+            if (rpcInvocation.getInvokeMode() != null) {\r\n+                return rpcInvocation.getInvokeMode();\r\n+            }\r\n+        }\r\n+\r\n+        if (isReturnTypeFuture(inv)) {\r\n+            return InvokeMode.FUTURE;\r\n+        } else if (isAsync(url, inv)) {\r\n+            return InvokeMode.ASYNC;\r\n+        } else {\r\n+            return InvokeMode.SYNC;\r\n+        }\r\n+    }\r\n+\r\n+    public static boolean isOneway(URL url, Invocation inv) {\r\n+        boolean isOneway;\r\n+        if (Boolean.FALSE.toString().equals(inv.getAttachment(RETURN_KEY))) {\r\n+            isOneway = true;\r\n+        } else {\r\n+            isOneway = !url.getMethodParameter(getMethodName(inv), RETURN_KEY, true);\r\n+        }\r\n+        return isOneway;\r\n+    }\r\n+\r\n+    private static Method getMethodByService(Invocation invocation, String service) throws NoSuchMethodException {\r\n+        Class<?> invokerInterface = invocation.getInvoker().getInterface();\r\n+        Class<?> cls = invokerInterface != null ? ReflectUtils.forName(invokerInterface.getClassLoader(), service)\r\n+                : ReflectUtils.forName(service);\r\n+        Method method = cls.getMethod(invocation.getMethodName(), invocation.getParameterTypes());\r\n+        if (method.getReturnType() == void.class) {\r\n+            return null;\r\n+        }\r\n+        return method;\r\n+    }\r\n+\r\n+    public static long getTimeout(Invocation invocation, long defaultTimeout) {\r\n+        long timeout = defaultTimeout;\r\n+        Object genericTimeout = invocation.getObjectAttachment(TIMEOUT_ATTACHMENT_KEY);\r\n+        if (genericTimeout != null) {\r\n+            timeout = convertToNumber(genericTimeout, defaultTimeout);\r\n+        }\r\n+        return timeout;\r\n+    }\r\n+\r\n+    public static long getTimeout(URL url, String methodName, RpcContext context, long defaultTimeout) {\r\n+        long timeout = defaultTimeout;\r\n+        Object genericTimeout = context.getObjectAttachment(TIMEOUT_KEY);\r\n+        if (genericTimeout != null) {\r\n+            timeout = convertToNumber(genericTimeout, defaultTimeout);\r\n+        } else if (url != null) {\r\n+            timeout = url.getMethodPositiveParameter(methodName, TIMEOUT_KEY, defaultTimeout);\r\n+        }\r\n+        return timeout;\r\n+    }\r\n+\r\n+    private static long convertToNumber(Object obj, long defaultTimeout) {\r\n+        long timeout = 0;\r\n+        try {\r\n+            if (obj instanceof String) {\r\n+                timeout = Long.parseLong((String) obj);\r\n+            } else if (obj instanceof Number) {\r\n+                timeout = ((Number) obj).longValue();\r\n+            } else {\r\n+                timeout = Long.parseLong(obj.toString());\r\n+            }\r\n+        } catch (Exception e) {\r\n+            // ignore\r\n+        }\r\n+        return timeout;\r\n+    }\r\n+}\r\n"}]}
