{"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: 68318 bytes, number of entries: 68\n+Zip file size: 68726 bytes, number of entries: 68\n -rw-r--r--  2.0 unx       64 b- defN 20-Apr-01 08:04 META-INF/MANIFEST.MF\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/metadata/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/\n@@ -17,54 +17,54 @@\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/services/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/\n -rw-r--r--  2.0 unx      946 b- defN 20-Apr-01 08:04 META-INF/DEPENDENCIES\n -rw-r--r--  2.0 unx    11358 b- defN 20-Apr-01 08:04 META-INF/LICENSE\n -rw-r--r--  2.0 unx      181 b- defN 20-Apr-01 08:04 META-INF/NOTICE\n--rw-r--r--  2.0 unx     3974 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java\n--rw-r--r--  2.0 unx     3729 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/ClassPathMetadataStorage.java\n--rw-r--r--  2.0 unx     2479 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/ServiceDefinitionMetadataAnnotationProcessor.java\n--rw-r--r--  2.0 unx     1878 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/ArrayTypeDefinitionBuilder.java\n--rw-r--r--  2.0 unx     2553 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/CollectionTypeDefinitionBuilder.java\n--rw-r--r--  2.0 unx     1915 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/DeclaredTypeDefinitionBuilder.java\n--rw-r--r--  2.0 unx     2125 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/EnumTypeDefinitionBuilder.java\n--rw-r--r--  2.0 unx     2533 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/GeneralTypeDefinitionBuilder.java\n--rw-r--r--  2.0 unx     2498 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/MapTypeDefinitionBuilder.java\n--rw-r--r--  2.0 unx     2401 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/MethodDefinitionBuilder.java\n--rw-r--r--  2.0 unx     1755 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/PrimitiveTypeDefinitionBuilder.java\n--rw-r--r--  2.0 unx     2517 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/ServiceDefinitionBuilder.java\n--rw-r--r--  2.0 unx     1779 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/SimpleTypeDefinitionBuilder.java\n--rw-r--r--  2.0 unx     3836 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/TypeDefinitionBuilder.java\n--rw-r--r--  2.0 unx     2583 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/AbstractAnnotatedMethodParameterProcessor.java\n--rw-r--r--  2.0 unx    13631 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/AbstractServiceRestMetadataResolver.java\n--rw-r--r--  2.0 unx     2443 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/AnnotatedMethodParameterProcessor.java\n--rw-r--r--  2.0 unx     7999 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/DefaultServiceRestMetadataResolver.java\n--rw-r--r--  2.0 unx     3662 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataAnnotationProcessor.java\n--rw-r--r--  2.0 unx     2210 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataResolver.java\n--rw-r--r--  2.0 unx     2438 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataStorage.java\n--rw-r--r--  2.0 unx     3030 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/DefaultValueParameterProcessor.java\n--rw-r--r--  2.0 unx     1388 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/FormParamParameterProcessor.java\n--rw-r--r--  2.0 unx     2380 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/HeaderParamParameterProcessor.java\n--rw-r--r--  2.0 unx     5230 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/JAXRSServiceRestMetadataResolver.java\n--rw-r--r--  2.0 unx     1396 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/MatrixParamParameterProcessor.java\n--rw-r--r--  2.0 unx     1913 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/ParamAnnotationParameterProcessor.java\n--rw-r--r--  2.0 unx     1392 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/QueryParamParameterProcessor.java\n--rw-r--r--  2.0 unx     2975 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java\n--rw-r--r--  2.0 unx     1917 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestHeaderParameterProcessor.java\n--rw-r--r--  2.0 unx     1965 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestParamParameterProcessor.java\n--rw-r--r--  2.0 unx     7053 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/SpringMvcServiceRestMetadataResolver.java\n--rw-r--r--  2.0 unx    11350 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/AnnotationUtils.java\n--rw-r--r--  2.0 unx     2692 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/ExecutableElementComparator.java\n--rw-r--r--  2.0 unx     6194 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/FieldUtils.java\n--rw-r--r--  2.0 unx     1468 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/LoggerUtils.java\n--rw-r--r--  2.0 unx     3507 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/MemberUtils.java\n--rw-r--r--  2.0 unx     7187 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/MethodUtils.java\n--rw-r--r--  2.0 unx     5018 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/ServiceAnnotationUtils.java\n--rw-r--r--  2.0 unx    15476 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java\n--rw-r--r--  2.0 unx      689 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.builder.TypeDefinitionBuilder\n--rw-r--r--  2.0 unx      869 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor\n--rw-r--r--  2.0 unx      314 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver\n--rw-r--r--  2.0 unx      185 b- defN 20-Apr-01 08:04 META-INF/services/javax.annotation.processing.Processor\n--rw-r--r--  2.0 unx     6074 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml\n+-rw-r--r--  2.0 unx     4082 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java\n+-rw-r--r--  2.0 unx     3834 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/ClassPathMetadataStorage.java\n+-rw-r--r--  2.0 unx     2539 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/ServiceDefinitionMetadataAnnotationProcessor.java\n+-rw-r--r--  2.0 unx     1928 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/ArrayTypeDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     2614 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/CollectionTypeDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     1964 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/DeclaredTypeDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     2180 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/EnumTypeDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     2598 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/GeneralTypeDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     2560 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/MapTypeDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     2454 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/MethodDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     1802 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/PrimitiveTypeDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     2573 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/ServiceDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     1828 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/SimpleTypeDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     3932 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/builder/TypeDefinitionBuilder.java\n+-rw-r--r--  2.0 unx     2635 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/AbstractAnnotatedMethodParameterProcessor.java\n+-rw-r--r--  2.0 unx    13922 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/AbstractServiceRestMetadataResolver.java\n+-rw-r--r--  2.0 unx     2507 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/AnnotatedMethodParameterProcessor.java\n+-rw-r--r--  2.0 unx     8185 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/DefaultServiceRestMetadataResolver.java\n+-rw-r--r--  2.0 unx     3748 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataAnnotationProcessor.java\n+-rw-r--r--  2.0 unx     2265 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataResolver.java\n+-rw-r--r--  2.0 unx     2499 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataStorage.java\n+-rw-r--r--  2.0 unx     3105 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/DefaultValueParameterProcessor.java\n+-rw-r--r--  2.0 unx     1422 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/FormParamParameterProcessor.java\n+-rw-r--r--  2.0 unx     2431 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/HeaderParamParameterProcessor.java\n+-rw-r--r--  2.0 unx     5338 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/JAXRSServiceRestMetadataResolver.java\n+-rw-r--r--  2.0 unx     1430 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/MatrixParamParameterProcessor.java\n+-rw-r--r--  2.0 unx     1951 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/ParamAnnotationParameterProcessor.java\n+-rw-r--r--  2.0 unx     1426 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/QueryParamParameterProcessor.java\n+-rw-r--r--  2.0 unx     3044 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java\n+-rw-r--r--  2.0 unx     1960 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestHeaderParameterProcessor.java\n+-rw-r--r--  2.0 unx     2009 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestParamParameterProcessor.java\n+-rw-r--r--  2.0 unx     7218 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/SpringMvcServiceRestMetadataResolver.java\n+-rw-r--r--  2.0 unx    11583 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/AnnotationUtils.java\n+-rw-r--r--  2.0 unx     2764 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/ExecutableElementComparator.java\n+-rw-r--r--  2.0 unx     6340 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/FieldUtils.java\n+-rw-r--r--  2.0 unx     1513 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/LoggerUtils.java\n+-rw-r--r--  2.0 unx     3601 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/MemberUtils.java\n+-rw-r--r--  2.0 unx     7343 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/MethodUtils.java\n+-rw-r--r--  2.0 unx     5155 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/ServiceAnnotationUtils.java\n+-rw-r--r--  2.0 unx    15875 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java\n+-rw-r--r--  2.0 unx      695 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.builder.TypeDefinitionBuilder\n+-rw-r--r--  2.0 unx      878 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor\n+-rw-r--r--  2.0 unx      316 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver\n+-rw-r--r--  2.0 unx      187 b- defN 20-Apr-01 08:04 META-INF/services/javax.annotation.processing.Processor\n+-rw-r--r--  2.0 unx     5906 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml\n -rw-r--r--  2.0 unx       79 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.properties\n-68 files, 175228 bytes uncompressed, 53764 bytes compressed:  69.3%\n+68 files, 178767 bytes uncompressed, 54172 bytes compressed:  69.7%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -407,2996 +407,2996 @@\n 016AF Extract Zip Spec      14 (20) '2.0'\n 016B0 Extract OS            00 (0) 'MS-DOS'\n 016B1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n 016B3 Compression Method    0008 (8) 'Deflated'\n 016B5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-016B9 CRC                   CFBCCE03 (3485257219)\n-016BD Compressed Size       0000053F (1343)\n-016C1 Uncompressed Size     00000F86 (3974)\n+016B9 CRC                   EDE26CAC (3991039148)\n+016BD Compressed Size       0000054C (1356)\n+016C1 Uncompressed Size     00000FF2 (4082)\n 016C5 Filename Length       0057 (87)\n 016C7 Extra Length          0000 (0)\n 016C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x16C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 01720 PAYLOAD\n \n-01C5F LOCAL HEADER #24      04034B50 (67324752)\n-01C63 Extract Zip Spec      14 (20) '2.0'\n-01C64 Extract OS            00 (0) 'MS-DOS'\n-01C65 General Purpose Flag  0800 (2048)\n+01C6C LOCAL HEADER #24      04034B50 (67324752)\n+01C70 Extract Zip Spec      14 (20) '2.0'\n+01C71 Extract OS            00 (0) 'MS-DOS'\n+01C72 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-01C67 Compression Method    0008 (8) 'Deflated'\n-01C69 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-01C6D CRC                   98FA0F9F (2566524831)\n-01C71 Compressed Size       000004D5 (1237)\n-01C75 Uncompressed Size     00000E91 (3729)\n-01C79 Filename Length       004D (77)\n-01C7B Extra Length          0000 (0)\n-01C7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+01C74 Compression Method    0008 (8) 'Deflated'\n+01C76 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+01C7A CRC                   28829ABF (679647935)\n+01C7E Compressed Size       000004E1 (1249)\n+01C82 Uncompressed Size     00000EFA (3834)\n+01C86 Filename Length       004D (77)\n+01C88 Extra Length          0000 (0)\n+01C8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1C7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-01CCA PAYLOAD\n+01CD7 PAYLOAD\n \n-0219F LOCAL HEADER #25      04034B50 (67324752)\n-021A3 Extract Zip Spec      14 (20) '2.0'\n-021A4 Extract OS            00 (0) 'MS-DOS'\n-021A5 General Purpose Flag  0800 (2048)\n+021B8 LOCAL HEADER #25      04034B50 (67324752)\n+021BC Extract Zip Spec      14 (20) '2.0'\n+021BD Extract OS            00 (0) 'MS-DOS'\n+021BE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-021A7 Compression Method    0008 (8) 'Deflated'\n-021A9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-021AD CRC                   2E3E715F (775844191)\n-021B1 Compressed Size       000003FF (1023)\n-021B5 Uncompressed Size     000009AF (2479)\n-021B9 Filename Length       0061 (97)\n-021BB Extra Length          0000 (0)\n-021BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+021C0 Compression Method    0008 (8) 'Deflated'\n+021C2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+021C6 CRC                   E1E2CA9A (3789736602)\n+021CA Compressed Size       00000409 (1033)\n+021CE Uncompressed Size     000009EB (2539)\n+021D2 Filename Length       0061 (97)\n+021D4 Extra Length          0000 (0)\n+021D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x21BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x21D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0221E PAYLOAD\n+02237 PAYLOAD\n \n-0261D LOCAL HEADER #26      04034B50 (67324752)\n-02621 Extract Zip Spec      14 (20) '2.0'\n-02622 Extract OS            00 (0) 'MS-DOS'\n-02623 General Purpose Flag  0800 (2048)\n+02640 LOCAL HEADER #26      04034B50 (67324752)\n+02644 Extract Zip Spec      14 (20) '2.0'\n+02645 Extract OS            00 (0) 'MS-DOS'\n+02646 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-02625 Compression Method    0008 (8) 'Deflated'\n-02627 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0262B CRC                   D9A5C573 (3651519859)\n-0262F Compressed Size       0000033B (827)\n-02633 Uncompressed Size     00000756 (1878)\n-02637 Filename Length       0057 (87)\n-02639 Extra Length          0000 (0)\n-0263B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+02648 Compression Method    0008 (8) 'Deflated'\n+0264A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0264E CRC                   31BAA9F2 (834316786)\n+02652 Compressed Size       00000341 (833)\n+02656 Uncompressed Size     00000788 (1928)\n+0265A Filename Length       0057 (87)\n+0265C Extra Length          0000 (0)\n+0265E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x263B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x265E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02692 PAYLOAD\n+026B5 PAYLOAD\n \n-029CD LOCAL HEADER #27      04034B50 (67324752)\n-029D1 Extract Zip Spec      14 (20) '2.0'\n-029D2 Extract OS            00 (0) 'MS-DOS'\n-029D3 General Purpose Flag  0800 (2048)\n+029F6 LOCAL HEADER #27      04034B50 (67324752)\n+029FA Extract Zip Spec      14 (20) '2.0'\n+029FB Extract OS            00 (0) 'MS-DOS'\n+029FC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-029D5 Compression Method    0008 (8) 'Deflated'\n-029D7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-029DB CRC                   A2AE804F (2729345103)\n-029DF Compressed Size       000003F9 (1017)\n-029E3 Uncompressed Size     000009F9 (2553)\n-029E7 Filename Length       005C (92)\n-029E9 Extra Length          0000 (0)\n-029EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+029FE Compression Method    0008 (8) 'Deflated'\n+02A00 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+02A04 CRC                   CA7A5ADF (3397016287)\n+02A08 Compressed Size       00000402 (1026)\n+02A0C Uncompressed Size     00000A36 (2614)\n+02A10 Filename Length       005C (92)\n+02A12 Extra Length          0000 (0)\n+02A14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x29EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2A14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02A47 PAYLOAD\n+02A70 PAYLOAD\n \n-02E40 LOCAL HEADER #28      04034B50 (67324752)\n-02E44 Extract Zip Spec      14 (20) '2.0'\n-02E45 Extract OS            00 (0) 'MS-DOS'\n-02E46 General Purpose Flag  0800 (2048)\n+02E72 LOCAL HEADER #28      04034B50 (67324752)\n+02E76 Extract Zip Spec      14 (20) '2.0'\n+02E77 Extract OS            00 (0) 'MS-DOS'\n+02E78 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-02E48 Compression Method    0008 (8) 'Deflated'\n-02E4A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-02E4E CRC                   F33EC0CF (4080976079)\n-02E52 Compressed Size       00000340 (832)\n-02E56 Uncompressed Size     0000077B (1915)\n-02E5A Filename Length       005A (90)\n-02E5C Extra Length          0000 (0)\n-02E5E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+02E7A Compression Method    0008 (8) 'Deflated'\n+02E7C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+02E80 CRC                   9F81DA8D (2676087437)\n+02E84 Compressed Size       00000347 (839)\n+02E88 Uncompressed Size     000007AC (1964)\n+02E8C Filename Length       005A (90)\n+02E8E Extra Length          0000 (0)\n+02E90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2E5E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2E90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-02EB8 PAYLOAD\n+02EEA PAYLOAD\n \n-031F8 LOCAL HEADER #29      04034B50 (67324752)\n-031FC Extract Zip Spec      14 (20) '2.0'\n-031FD Extract OS            00 (0) 'MS-DOS'\n-031FE General Purpose Flag  0800 (2048)\n+03231 LOCAL HEADER #29      04034B50 (67324752)\n+03235 Extract Zip Spec      14 (20) '2.0'\n+03236 Extract OS            00 (0) 'MS-DOS'\n+03237 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-03200 Compression Method    0008 (8) 'Deflated'\n-03202 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-03206 CRC                   4315772B (1125480235)\n-0320A Compressed Size       00000367 (871)\n-0320E Uncompressed Size     0000084D (2125)\n-03212 Filename Length       0056 (86)\n-03214 Extra Length          0000 (0)\n-03216 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+03239 Compression Method    0008 (8) 'Deflated'\n+0323B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0323F CRC                   F865F474 (4167431284)\n+03243 Compressed Size       0000036F (879)\n+03247 Uncompressed Size     00000884 (2180)\n+0324B Filename Length       0056 (86)\n+0324D Extra Length          0000 (0)\n+0324F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3216: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x324F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0326C PAYLOAD\n+032A5 PAYLOAD\n \n-035D3 LOCAL HEADER #30      04034B50 (67324752)\n-035D7 Extract Zip Spec      14 (20) '2.0'\n-035D8 Extract OS            00 (0) 'MS-DOS'\n-035D9 General Purpose Flag  0800 (2048)\n+03614 LOCAL HEADER #30      04034B50 (67324752)\n+03618 Extract Zip Spec      14 (20) '2.0'\n+03619 Extract OS            00 (0) 'MS-DOS'\n+0361A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-035DB Compression Method    0008 (8) 'Deflated'\n-035DD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-035E1 CRC                   9303FD8F (2466512271)\n-035E5 Compressed Size       000003C9 (969)\n-035E9 Uncompressed Size     000009E5 (2533)\n-035ED Filename Length       0059 (89)\n-035EF Extra Length          0000 (0)\n-035F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0361C Compression Method    0008 (8) 'Deflated'\n+0361E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+03622 CRC                   3B8200F2 (998375666)\n+03626 Compressed Size       000003D1 (977)\n+0362A Uncompressed Size     00000A26 (2598)\n+0362E Filename Length       0059 (89)\n+03630 Extra Length          0000 (0)\n+03632 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x35F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3632: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0364A PAYLOAD\n+0368B PAYLOAD\n \n-03A13 LOCAL HEADER #31      04034B50 (67324752)\n-03A17 Extract Zip Spec      14 (20) '2.0'\n-03A18 Extract OS            00 (0) 'MS-DOS'\n-03A19 General Purpose Flag  0800 (2048)\n+03A5C LOCAL HEADER #31      04034B50 (67324752)\n+03A60 Extract Zip Spec      14 (20) '2.0'\n+03A61 Extract OS            00 (0) 'MS-DOS'\n+03A62 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-03A1B Compression Method    0008 (8) 'Deflated'\n-03A1D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-03A21 CRC                   243129AC (607201708)\n-03A25 Compressed Size       000003F1 (1009)\n-03A29 Uncompressed Size     000009C2 (2498)\n-03A2D Filename Length       0055 (85)\n-03A2F Extra Length          0000 (0)\n-03A31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+03A64 Compression Method    0008 (8) 'Deflated'\n+03A66 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+03A6A CRC                   D0E79628 (3504838184)\n+03A6E Compressed Size       000003FC (1020)\n+03A72 Uncompressed Size     00000A00 (2560)\n+03A76 Filename Length       0055 (85)\n+03A78 Extra Length          0000 (0)\n+03A7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3A31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3A7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03A86 PAYLOAD\n+03ACF PAYLOAD\n \n-03E77 LOCAL HEADER #32      04034B50 (67324752)\n-03E7B Extract Zip Spec      14 (20) '2.0'\n-03E7C Extract OS            00 (0) 'MS-DOS'\n-03E7D General Purpose Flag  0800 (2048)\n+03ECB LOCAL HEADER #32      04034B50 (67324752)\n+03ECF Extract Zip Spec      14 (20) '2.0'\n+03ED0 Extract OS            00 (0) 'MS-DOS'\n+03ED1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-03E7F Compression Method    0008 (8) 'Deflated'\n-03E81 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-03E85 CRC                   82B7884A (2193066058)\n-03E89 Compressed Size       00000367 (871)\n-03E8D Uncompressed Size     00000961 (2401)\n-03E91 Filename Length       0054 (84)\n-03E93 Extra Length          0000 (0)\n-03E95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+03ED3 Compression Method    0008 (8) 'Deflated'\n+03ED5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+03ED9 CRC                   83EF7907 (2213509383)\n+03EDD Compressed Size       0000036C (876)\n+03EE1 Uncompressed Size     00000996 (2454)\n+03EE5 Filename Length       0054 (84)\n+03EE7 Extra Length          0000 (0)\n+03EE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3E95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3EE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-03EE9 PAYLOAD\n+03F3D PAYLOAD\n \n-04250 LOCAL HEADER #33      04034B50 (67324752)\n-04254 Extract Zip Spec      14 (20) '2.0'\n-04255 Extract OS            00 (0) 'MS-DOS'\n-04256 General Purpose Flag  0800 (2048)\n+042A9 LOCAL HEADER #33      04034B50 (67324752)\n+042AD Extract Zip Spec      14 (20) '2.0'\n+042AE Extract OS            00 (0) 'MS-DOS'\n+042AF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04258 Compression Method    0008 (8) 'Deflated'\n-0425A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0425E CRC                   0F671EAE (258416302)\n-04262 Compressed Size       0000030F (783)\n-04266 Uncompressed Size     000006DB (1755)\n-0426A Filename Length       005B (91)\n-0426C Extra Length          0000 (0)\n-0426E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+042B1 Compression Method    0008 (8) 'Deflated'\n+042B3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+042B7 CRC                   DC4AAC43 (3695881283)\n+042BB Compressed Size       00000319 (793)\n+042BF Uncompressed Size     0000070A (1802)\n+042C3 Filename Length       005B (91)\n+042C5 Extra Length          0000 (0)\n+042C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x426E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x42C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-042C9 PAYLOAD\n+04322 PAYLOAD\n \n-045D8 LOCAL HEADER #34      04034B50 (67324752)\n-045DC Extract Zip Spec      14 (20) '2.0'\n-045DD Extract OS            00 (0) 'MS-DOS'\n-045DE General Purpose Flag  0800 (2048)\n+0463B LOCAL HEADER #34      04034B50 (67324752)\n+0463F Extract Zip Spec      14 (20) '2.0'\n+04640 Extract OS            00 (0) 'MS-DOS'\n+04641 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-045E0 Compression Method    0008 (8) 'Deflated'\n-045E2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-045E6 CRC                   14082F15 (336080661)\n-045EA Compressed Size       000003BB (955)\n-045EE Uncompressed Size     000009D5 (2517)\n-045F2 Filename Length       0055 (85)\n-045F4 Extra Length          0000 (0)\n-045F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04643 Compression Method    0008 (8) 'Deflated'\n+04645 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04649 CRC                   9D1BE974 (2635852148)\n+0464D Compressed Size       000003C5 (965)\n+04651 Uncompressed Size     00000A0D (2573)\n+04655 Filename Length       0055 (85)\n+04657 Extra Length          0000 (0)\n+04659 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x45F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4659: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0464B PAYLOAD\n+046AE PAYLOAD\n \n-04A06 LOCAL HEADER #35      04034B50 (67324752)\n-04A0A Extract Zip Spec      14 (20) '2.0'\n-04A0B Extract OS            00 (0) 'MS-DOS'\n-04A0C General Purpose Flag  0800 (2048)\n+04A73 LOCAL HEADER #35      04034B50 (67324752)\n+04A77 Extract Zip Spec      14 (20) '2.0'\n+04A78 Extract OS            00 (0) 'MS-DOS'\n+04A79 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04A0E Compression Method    0008 (8) 'Deflated'\n-04A10 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-04A14 CRC                   3F334AFC (1060326140)\n-04A18 Compressed Size       00000314 (788)\n-04A1C Uncompressed Size     000006F3 (1779)\n-04A20 Filename Length       0058 (88)\n-04A22 Extra Length          0000 (0)\n-04A24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04A7B Compression Method    0008 (8) 'Deflated'\n+04A7D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04A81 CRC                   F3B9E657 (4089046615)\n+04A85 Compressed Size       0000031D (797)\n+04A89 Uncompressed Size     00000724 (1828)\n+04A8D Filename Length       0058 (88)\n+04A8F Extra Length          0000 (0)\n+04A91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4A24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4A91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04A7C PAYLOAD\n+04AE9 PAYLOAD\n \n-04D90 LOCAL HEADER #36      04034B50 (67324752)\n-04D94 Extract Zip Spec      14 (20) '2.0'\n-04D95 Extract OS            00 (0) 'MS-DOS'\n-04D96 General Purpose Flag  0800 (2048)\n+04E06 LOCAL HEADER #36      04034B50 (67324752)\n+04E0A Extract Zip Spec      14 (20) '2.0'\n+04E0B Extract OS            00 (0) 'MS-DOS'\n+04E0C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04D98 Compression Method    0008 (8) 'Deflated'\n-04D9A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-04D9E CRC                   D56FC3BA (3580871610)\n-04DA2 Compressed Size       000004BD (1213)\n-04DA6 Uncompressed Size     00000EFC (3836)\n-04DAA Filename Length       0052 (82)\n-04DAC Extra Length          0000 (0)\n-04DAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04E0E Compression Method    0008 (8) 'Deflated'\n+04E10 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04E14 CRC                   5F1744C1 (1595360449)\n+04E18 Compressed Size       000004C9 (1225)\n+04E1C Uncompressed Size     00000F5C (3932)\n+04E20 Filename Length       0052 (82)\n+04E22 Extra Length          0000 (0)\n+04E24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4DAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4E24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04E00 PAYLOAD\n+04E76 PAYLOAD\n \n-052BD LOCAL HEADER #37      04034B50 (67324752)\n-052C1 Extract Zip Spec      14 (20) '2.0'\n-052C2 Extract OS            00 (0) 'MS-DOS'\n-052C3 General Purpose Flag  0800 (2048)\n+0533F LOCAL HEADER #37      04034B50 (67324752)\n+05343 Extract Zip Spec      14 (20) '2.0'\n+05344 Extract OS            00 (0) 'MS-DOS'\n+05345 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-052C5 Compression Method    0008 (8) 'Deflated'\n-052C7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-052CB CRC                   C0B7814F (3233251663)\n-052CF Compressed Size       0000036C (876)\n-052D3 Uncompressed Size     00000A17 (2583)\n-052D7 Filename Length       0063 (99)\n-052D9 Extra Length          0000 (0)\n-052DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+05347 Compression Method    0008 (8) 'Deflated'\n+05349 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0534D CRC                   88B249EC (2293385708)\n+05351 Compressed Size       00000375 (885)\n+05355 Uncompressed Size     00000A4B (2635)\n+05359 Filename Length       0063 (99)\n+0535B Extra Length          0000 (0)\n+0535D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x52DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x535D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0533E PAYLOAD\n+053C0 PAYLOAD\n \n-056AA LOCAL HEADER #38      04034B50 (67324752)\n-056AE Extract Zip Spec      14 (20) '2.0'\n-056AF Extract OS            00 (0) 'MS-DOS'\n-056B0 General Purpose Flag  0800 (2048)\n+05735 LOCAL HEADER #38      04034B50 (67324752)\n+05739 Extract Zip Spec      14 (20) '2.0'\n+0573A Extract OS            00 (0) 'MS-DOS'\n+0573B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-056B2 Compression Method    0008 (8) 'Deflated'\n-056B4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-056B8 CRC                   E5A77ED4 (3852959444)\n-056BC Compressed Size       00000B9F (2975)\n-056C0 Uncompressed Size     0000353F (13631)\n-056C4 Filename Length       005D (93)\n-056C6 Extra Length          0000 (0)\n-056C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0573D Compression Method    0008 (8) 'Deflated'\n+0573F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+05743 CRC                   3BC8480C (1002981388)\n+05747 Compressed Size       00000BB1 (2993)\n+0574B Uncompressed Size     00003662 (13922)\n+0574F Filename Length       005D (93)\n+05751 Extra Length          0000 (0)\n+05753 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x56C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5753: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05725 PAYLOAD\n+057B0 PAYLOAD\n \n-062C4 LOCAL HEADER #39      04034B50 (67324752)\n-062C8 Extract Zip Spec      14 (20) '2.0'\n-062C9 Extract OS            00 (0) 'MS-DOS'\n-062CA General Purpose Flag  0800 (2048)\n+06361 LOCAL HEADER #39      04034B50 (67324752)\n+06365 Extract Zip Spec      14 (20) '2.0'\n+06366 Extract OS            00 (0) 'MS-DOS'\n+06367 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-062CC Compression Method    0008 (8) 'Deflated'\n-062CE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-062D2 CRC                   E9A44E2B (3919859243)\n-062D6 Compressed Size       000003DA (986)\n-062DA Uncompressed Size     0000098B (2443)\n-062DE Filename Length       005B (91)\n-062E0 Extra Length          0000 (0)\n-062E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+06369 Compression Method    0008 (8) 'Deflated'\n+0636B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0636F CRC                   EDDF253D (3990824253)\n+06373 Compressed Size       000003E7 (999)\n+06377 Uncompressed Size     000009CB (2507)\n+0637B Filename Length       005B (91)\n+0637D Extra Length          0000 (0)\n+0637F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x62E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x637F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0633D PAYLOAD\n+063DA PAYLOAD\n \n-06717 LOCAL HEADER #40      04034B50 (67324752)\n-0671B Extract Zip Spec      14 (20) '2.0'\n-0671C Extract OS            00 (0) 'MS-DOS'\n-0671D General Purpose Flag  0800 (2048)\n+067C1 LOCAL HEADER #40      04034B50 (67324752)\n+067C5 Extract Zip Spec      14 (20) '2.0'\n+067C6 Extract OS            00 (0) 'MS-DOS'\n+067C7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0671F Compression Method    0008 (8) 'Deflated'\n-06721 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-06725 CRC                   55F65FD4 (1442209748)\n-06729 Compressed Size       000008C4 (2244)\n-0672D Uncompressed Size     00001F3F (7999)\n-06731 Filename Length       005C (92)\n-06733 Extra Length          0000 (0)\n-06735 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+067C9 Compression Method    0008 (8) 'Deflated'\n+067CB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+067CF CRC                   F9C2E219 (4190298649)\n+067D3 Compressed Size       000008D0 (2256)\n+067D7 Uncompressed Size     00001FF9 (8185)\n+067DB Filename Length       005C (92)\n+067DD Extra Length          0000 (0)\n+067DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6735: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x67DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-06791 PAYLOAD\n+0683B PAYLOAD\n \n-07055 LOCAL HEADER #41      04034B50 (67324752)\n-07059 Extract Zip Spec      14 (20) '2.0'\n-0705A Extract OS            00 (0) 'MS-DOS'\n-0705B General Purpose Flag  0800 (2048)\n+0710B LOCAL HEADER #41      04034B50 (67324752)\n+0710F Extract Zip Spec      14 (20) '2.0'\n+07110 Extract OS            00 (0) 'MS-DOS'\n+07111 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0705D Compression Method    0008 (8) 'Deflated'\n-0705F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-07063 CRC                   08A2B33B (144880443)\n-07067 Compressed Size       000004ED (1261)\n-0706B Uncompressed Size     00000E4E (3662)\n-0706F Filename Length       0060 (96)\n-07071 Extra Length          0000 (0)\n-07073 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+07113 Compression Method    0008 (8) 'Deflated'\n+07115 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+07119 CRC                   6F538150 (1867743568)\n+0711D Compressed Size       000004FA (1274)\n+07121 Uncompressed Size     00000EA4 (3748)\n+07125 Filename Length       0060 (96)\n+07127 Extra Length          0000 (0)\n+07129 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7073: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7129: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-070D3 PAYLOAD\n+07189 PAYLOAD\n \n-075C0 LOCAL HEADER #42      04034B50 (67324752)\n-075C4 Extract Zip Spec      14 (20) '2.0'\n-075C5 Extract OS            00 (0) 'MS-DOS'\n-075C6 General Purpose Flag  0800 (2048)\n+07683 LOCAL HEADER #42      04034B50 (67324752)\n+07687 Extract Zip Spec      14 (20) '2.0'\n+07688 Extract OS            00 (0) 'MS-DOS'\n+07689 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-075C8 Compression Method    0008 (8) 'Deflated'\n-075CA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-075CE CRC                   6E775F76 (1853316982)\n-075D2 Compressed Size       00000372 (882)\n-075D6 Uncompressed Size     000008A2 (2210)\n-075DA Filename Length       0055 (85)\n-075DC Extra Length          0000 (0)\n-075DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0768B Compression Method    0008 (8) 'Deflated'\n+0768D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+07691 CRC                   D6C4744E (3603199054)\n+07695 Compressed Size       00000378 (888)\n+07699 Uncompressed Size     000008D9 (2265)\n+0769D Filename Length       0055 (85)\n+0769F Extra Length          0000 (0)\n+076A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x75DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x76A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07633 PAYLOAD\n+076F6 PAYLOAD\n \n-079A5 LOCAL HEADER #43      04034B50 (67324752)\n-079A9 Extract Zip Spec      14 (20) '2.0'\n-079AA Extract OS            00 (0) 'MS-DOS'\n-079AB General Purpose Flag  0800 (2048)\n+07A6E LOCAL HEADER #43      04034B50 (67324752)\n+07A72 Extract Zip Spec      14 (20) '2.0'\n+07A73 Extract OS            00 (0) 'MS-DOS'\n+07A74 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-079AD Compression Method    0008 (8) 'Deflated'\n-079AF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-079B3 CRC                   AD40460E (2906670606)\n-079B7 Compressed Size       000003C7 (967)\n-079BB Uncompressed Size     00000986 (2438)\n-079BF Filename Length       0054 (84)\n-079C1 Extra Length          0000 (0)\n-079C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+07A76 Compression Method    0008 (8) 'Deflated'\n+07A78 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+07A7C CRC                   D59F389F (3583981727)\n+07A80 Compressed Size       000003D1 (977)\n+07A84 Uncompressed Size     000009C3 (2499)\n+07A88 Filename Length       0054 (84)\n+07A8A Extra Length          0000 (0)\n+07A8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x79C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7A8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07A17 PAYLOAD\n+07AE0 PAYLOAD\n \n-07DDE LOCAL HEADER #44      04034B50 (67324752)\n-07DE2 Extract Zip Spec      14 (20) '2.0'\n-07DE3 Extract OS            00 (0) 'MS-DOS'\n-07DE4 General Purpose Flag  0800 (2048)\n+07EB1 LOCAL HEADER #44      04034B50 (67324752)\n+07EB5 Extract Zip Spec      14 (20) '2.0'\n+07EB6 Extract OS            00 (0) 'MS-DOS'\n+07EB7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-07DE6 Compression Method    0008 (8) 'Deflated'\n-07DE8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-07DEC CRC                   C7D687E1 (3352725473)\n-07DF0 Compressed Size       00000474 (1140)\n-07DF4 Uncompressed Size     00000BD6 (3030)\n-07DF8 Filename Length       005E (94)\n-07DFA Extra Length          0000 (0)\n-07DFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+07EB9 Compression Method    0008 (8) 'Deflated'\n+07EBB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+07EBF CRC                   6B2F7A85 (1798273669)\n+07EC3 Compressed Size       00000482 (1154)\n+07EC7 Uncompressed Size     00000C21 (3105)\n+07ECB Filename Length       005E (94)\n+07ECD Extra Length          0000 (0)\n+07ECF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7DFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7ECF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07E5A PAYLOAD\n+07F2D PAYLOAD\n \n-082CE LOCAL HEADER #45      04034B50 (67324752)\n-082D2 Extract Zip Spec      14 (20) '2.0'\n-082D3 Extract OS            00 (0) 'MS-DOS'\n-082D4 General Purpose Flag  0800 (2048)\n+083AF LOCAL HEADER #45      04034B50 (67324752)\n+083B3 Extract Zip Spec      14 (20) '2.0'\n+083B4 Extract OS            00 (0) 'MS-DOS'\n+083B5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-082D6 Compression Method    0008 (8) 'Deflated'\n-082D8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-082DC CRC                   34169900 (873896192)\n-082E0 Compressed Size       000002C2 (706)\n-082E4 Uncompressed Size     0000056C (1388)\n-082E8 Filename Length       005B (91)\n-082EA Extra Length          0000 (0)\n-082EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+083B7 Compression Method    0008 (8) 'Deflated'\n+083B9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+083BD CRC                   B2CF52EA (2999931626)\n+083C1 Compressed Size       000002CA (714)\n+083C5 Uncompressed Size     0000058E (1422)\n+083C9 Filename Length       005B (91)\n+083CB Extra Length          0000 (0)\n+083CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x82EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x83CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-08347 PAYLOAD\n+08428 PAYLOAD\n \n-08609 LOCAL HEADER #46      04034B50 (67324752)\n-0860D Extract Zip Spec      14 (20) '2.0'\n-0860E Extract OS            00 (0) 'MS-DOS'\n-0860F General Purpose Flag  0800 (2048)\n+086F2 LOCAL HEADER #46      04034B50 (67324752)\n+086F6 Extract Zip Spec      14 (20) '2.0'\n+086F7 Extract OS            00 (0) 'MS-DOS'\n+086F8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-08611 Compression Method    0008 (8) 'Deflated'\n-08613 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-08617 CRC                   6C26EEDA (1814490842)\n-0861B Compressed Size       000003A8 (936)\n-0861F Uncompressed Size     0000094C (2380)\n-08623 Filename Length       005D (93)\n-08625 Extra Length          0000 (0)\n-08627 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+086FA Compression Method    0008 (8) 'Deflated'\n+086FC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+08700 CRC                   4E4D89CC (1313704396)\n+08704 Compressed Size       000003B2 (946)\n+08708 Uncompressed Size     0000097F (2431)\n+0870C Filename Length       005D (93)\n+0870E Extra Length          0000 (0)\n+08710 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x8627: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8710: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-08684 PAYLOAD\n+0876D PAYLOAD\n \n-08A2C LOCAL HEADER #47      04034B50 (67324752)\n-08A30 Extract Zip Spec      14 (20) '2.0'\n-08A31 Extract OS            00 (0) 'MS-DOS'\n-08A32 General Purpose Flag  0800 (2048)\n+08B1F LOCAL HEADER #47      04034B50 (67324752)\n+08B23 Extract Zip Spec      14 (20) '2.0'\n+08B24 Extract OS            00 (0) 'MS-DOS'\n+08B25 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-08A34 Compression Method    0008 (8) 'Deflated'\n-08A36 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-08A3A CRC                   3E0DDE77 (1041096311)\n-08A3E Compressed Size       00000508 (1288)\n-08A42 Uncompressed Size     0000146E (5230)\n-08A46 Filename Length       0060 (96)\n-08A48 Extra Length          0000 (0)\n-08A4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08B27 Compression Method    0008 (8) 'Deflated'\n+08B29 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+08B2D CRC                   DD72B025 (3715280933)\n+08B31 Compressed Size       00000513 (1299)\n+08B35 Uncompressed Size     000014DA (5338)\n+08B39 Filename Length       0060 (96)\n+08B3B Extra Length          0000 (0)\n+08B3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x8A4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8B3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-08AAA PAYLOAD\n+08B9D PAYLOAD\n \n-08FB2 LOCAL HEADER #48      04034B50 (67324752)\n-08FB6 Extract Zip Spec      14 (20) '2.0'\n-08FB7 Extract OS            00 (0) 'MS-DOS'\n-08FB8 General Purpose Flag  0800 (2048)\n+090B0 LOCAL HEADER #48      04034B50 (67324752)\n+090B4 Extract Zip Spec      14 (20) '2.0'\n+090B5 Extract OS            00 (0) 'MS-DOS'\n+090B6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-08FBA Compression Method    0008 (8) 'Deflated'\n-08FBC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-08FC0 CRC                   FFC4205D (4291043421)\n-08FC4 Compressed Size       000002C5 (709)\n-08FC8 Uncompressed Size     00000574 (1396)\n-08FCC Filename Length       005D (93)\n-08FCE Extra Length          0000 (0)\n-08FD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+090B8 Compression Method    0008 (8) 'Deflated'\n+090BA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+090BE CRC                   7B71E274 (2071061108)\n+090C2 Compressed Size       000002CC (716)\n+090C6 Uncompressed Size     00000596 (1430)\n+090CA Filename Length       005D (93)\n+090CC Extra Length          0000 (0)\n+090CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x8FD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x90CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0902D PAYLOAD\n+0912B PAYLOAD\n \n-092F2 LOCAL HEADER #49      04034B50 (67324752)\n-092F6 Extract Zip Spec      14 (20) '2.0'\n-092F7 Extract OS            00 (0) 'MS-DOS'\n-092F8 General Purpose Flag  0800 (2048)\n+093F7 LOCAL HEADER #49      04034B50 (67324752)\n+093FB Extract Zip Spec      14 (20) '2.0'\n+093FC Extract OS            00 (0) 'MS-DOS'\n+093FD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-092FA Compression Method    0008 (8) 'Deflated'\n-092FC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-09300 CRC                   4DBBA4A0 (1304143008)\n-09304 Compressed Size       00000316 (790)\n-09308 Uncompressed Size     00000779 (1913)\n-0930C Filename Length       0061 (97)\n-0930E Extra Length          0000 (0)\n-09310 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+093FF Compression Method    0008 (8) 'Deflated'\n+09401 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+09405 CRC                   2A9B2D50 (714812752)\n+09409 Compressed Size       00000320 (800)\n+0940D Uncompressed Size     0000079F (1951)\n+09411 Filename Length       0061 (97)\n+09413 Extra Length          0000 (0)\n+09415 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x9310: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9415: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09371 PAYLOAD\n+09476 PAYLOAD\n \n-09687 LOCAL HEADER #50      04034B50 (67324752)\n-0968B Extract Zip Spec      14 (20) '2.0'\n-0968C Extract OS            00 (0) 'MS-DOS'\n-0968D General Purpose Flag  0800 (2048)\n+09796 LOCAL HEADER #50      04034B50 (67324752)\n+0979A Extract Zip Spec      14 (20) '2.0'\n+0979B Extract OS            00 (0) 'MS-DOS'\n+0979C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0968F Compression Method    0008 (8) 'Deflated'\n-09691 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-09695 CRC                   DB349372 (3677655922)\n-09699 Compressed Size       000002C5 (709)\n-0969D Uncompressed Size     00000570 (1392)\n-096A1 Filename Length       005C (92)\n-096A3 Extra Length          0000 (0)\n-096A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0979E Compression Method    0008 (8) 'Deflated'\n+097A0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+097A4 CRC                   7EE5B353 (2128982867)\n+097A8 Compressed Size       000002CC (716)\n+097AC Uncompressed Size     00000592 (1426)\n+097B0 Filename Length       005C (92)\n+097B2 Extra Length          0000 (0)\n+097B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x96A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x97B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09701 PAYLOAD\n+09810 PAYLOAD\n \n-099C6 LOCAL HEADER #51      04034B50 (67324752)\n-099CA Extract Zip Spec      14 (20) '2.0'\n-099CB Extract OS            00 (0) 'MS-DOS'\n-099CC General Purpose Flag  0800 (2048)\n+09ADC LOCAL HEADER #51      04034B50 (67324752)\n+09AE0 Extract Zip Spec      14 (20) '2.0'\n+09AE1 Extract OS            00 (0) 'MS-DOS'\n+09AE2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-099CE Compression Method    0008 (8) 'Deflated'\n-099D0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-099D4 CRC                   8BDD0458 (2346517592)\n-099D8 Compressed Size       00000402 (1026)\n-099DC Uncompressed Size     00000B9F (2975)\n-099E0 Filename Length       006F (111)\n-099E2 Extra Length          0000 (0)\n-099E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+09AE4 Compression Method    0008 (8) 'Deflated'\n+09AE6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+09AEA CRC                   6B98A176 (1805164918)\n+09AEE Compressed Size       0000040A (1034)\n+09AF2 Uncompressed Size     00000BE4 (3044)\n+09AF6 Filename Length       006F (111)\n+09AF8 Extra Length          0000 (0)\n+09AFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x99E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9AFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09A53 PAYLOAD\n+09B69 PAYLOAD\n \n-09E55 LOCAL HEADER #52      04034B50 (67324752)\n-09E59 Extract Zip Spec      14 (20) '2.0'\n-09E5A Extract OS            00 (0) 'MS-DOS'\n-09E5B General Purpose Flag  0800 (2048)\n+09F73 LOCAL HEADER #52      04034B50 (67324752)\n+09F77 Extract Zip Spec      14 (20) '2.0'\n+09F78 Extract OS            00 (0) 'MS-DOS'\n+09F79 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-09E5D Compression Method    0008 (8) 'Deflated'\n-09E5F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-09E63 CRC                   B306B850 (3003562064)\n-09E67 Compressed Size       0000035C (860)\n-09E6B Uncompressed Size     0000077D (1917)\n-09E6F Filename Length       0063 (99)\n-09E71 Extra Length          0000 (0)\n-09E73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+09F7B Compression Method    0008 (8) 'Deflated'\n+09F7D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+09F81 CRC                   3BA0FDB6 (1000406454)\n+09F85 Compressed Size       00000363 (867)\n+09F89 Uncompressed Size     000007A8 (1960)\n+09F8D Filename Length       0063 (99)\n+09F8F Extra Length          0000 (0)\n+09F91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x9E73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9F91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09ED6 PAYLOAD\n+09FF4 PAYLOAD\n \n-0A232 LOCAL HEADER #53      04034B50 (67324752)\n-0A236 Extract Zip Spec      14 (20) '2.0'\n-0A237 Extract OS            00 (0) 'MS-DOS'\n-0A238 General Purpose Flag  0800 (2048)\n+0A357 LOCAL HEADER #53      04034B50 (67324752)\n+0A35B Extract Zip Spec      14 (20) '2.0'\n+0A35C Extract OS            00 (0) 'MS-DOS'\n+0A35D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0A23A Compression Method    0008 (8) 'Deflated'\n-0A23C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0A240 CRC                   CD8B5D37 (3448462647)\n-0A244 Compressed Size       0000035A (858)\n-0A248 Uncompressed Size     000007AD (1965)\n-0A24C Filename Length       0062 (98)\n-0A24E Extra Length          0000 (0)\n-0A250 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A35F Compression Method    0008 (8) 'Deflated'\n+0A361 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0A365 CRC                   AE7D7C02 (2927459330)\n+0A369 Compressed Size       00000362 (866)\n+0A36D Uncompressed Size     000007D9 (2009)\n+0A371 Filename Length       0062 (98)\n+0A373 Extra Length          0000 (0)\n+0A375 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xA250: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA375: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A2B2 PAYLOAD\n+0A3D7 PAYLOAD\n \n-0A60C LOCAL HEADER #54      04034B50 (67324752)\n-0A610 Extract Zip Spec      14 (20) '2.0'\n-0A611 Extract OS            00 (0) 'MS-DOS'\n-0A612 General Purpose Flag  0800 (2048)\n+0A739 LOCAL HEADER #54      04034B50 (67324752)\n+0A73D Extract Zip Spec      14 (20) '2.0'\n+0A73E Extract OS            00 (0) 'MS-DOS'\n+0A73F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0A614 Compression Method    0008 (8) 'Deflated'\n-0A616 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0A61A CRC                   95BEC86B (2512308331)\n-0A61E Compressed Size       000006D4 (1748)\n-0A622 Uncompressed Size     00001B8D (7053)\n-0A626 Filename Length       0068 (104)\n-0A628 Extra Length          0000 (0)\n-0A62A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A741 Compression Method    0008 (8) 'Deflated'\n+0A743 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0A747 CRC                   DA74802F (3665068079)\n+0A74B Compressed Size       000006E0 (1760)\n+0A74F Uncompressed Size     00001C32 (7218)\n+0A753 Filename Length       0068 (104)\n+0A755 Extra Length          0000 (0)\n+0A757 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xA62A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA757: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A692 PAYLOAD\n+0A7BF PAYLOAD\n \n-0AD66 LOCAL HEADER #55      04034B50 (67324752)\n-0AD6A Extract Zip Spec      14 (20) '2.0'\n-0AD6B Extract OS            00 (0) 'MS-DOS'\n-0AD6C General Purpose Flag  0800 (2048)\n+0AE9F LOCAL HEADER #55      04034B50 (67324752)\n+0AEA3 Extract Zip Spec      14 (20) '2.0'\n+0AEA4 Extract OS            00 (0) 'MS-DOS'\n+0AEA5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0AD6E Compression Method    0008 (8) 'Deflated'\n-0AD70 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0AD74 CRC                   D216B32B (3524703019)\n-0AD78 Compressed Size       0000086D (2157)\n-0AD7C Uncompressed Size     00002C56 (11350)\n-0AD80 Filename Length       0049 (73)\n-0AD82 Extra Length          0000 (0)\n-0AD84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0AEA7 Compression Method    0008 (8) 'Deflated'\n+0AEA9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0AEAD CRC                   F8229510 (4163015952)\n+0AEB1 Compressed Size       0000087B (2171)\n+0AEB5 Uncompressed Size     00002D3F (11583)\n+0AEB9 Filename Length       0049 (73)\n+0AEBB Extra Length          0000 (0)\n+0AEBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xAD84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xAEBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0ADCD PAYLOAD\n+0AF06 PAYLOAD\n \n-0B63A LOCAL HEADER #56      04034B50 (67324752)\n-0B63E Extract Zip Spec      14 (20) '2.0'\n-0B63F Extract OS            00 (0) 'MS-DOS'\n-0B640 General Purpose Flag  0800 (2048)\n+0B781 LOCAL HEADER #56      04034B50 (67324752)\n+0B785 Extract Zip Spec      14 (20) '2.0'\n+0B786 Extract OS            00 (0) 'MS-DOS'\n+0B787 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B642 Compression Method    0008 (8) 'Deflated'\n-0B644 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0B648 CRC                   94E29DCE (2497879502)\n-0B64C Compressed Size       00000428 (1064)\n-0B650 Uncompressed Size     00000A84 (2692)\n-0B654 Filename Length       0055 (85)\n-0B656 Extra Length          0000 (0)\n-0B658 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B789 Compression Method    0008 (8) 'Deflated'\n+0B78B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0B78F CRC                   0206EE92 (34008722)\n+0B793 Compressed Size       00000435 (1077)\n+0B797 Uncompressed Size     00000ACC (2764)\n+0B79B Filename Length       0055 (85)\n+0B79D Extra Length          0000 (0)\n+0B79F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB658: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB79F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B6AD PAYLOAD\n+0B7F4 PAYLOAD\n \n-0BAD5 LOCAL HEADER #57      04034B50 (67324752)\n-0BAD9 Extract Zip Spec      14 (20) '2.0'\n-0BADA Extract OS            00 (0) 'MS-DOS'\n-0BADB General Purpose Flag  0800 (2048)\n+0BC29 LOCAL HEADER #57      04034B50 (67324752)\n+0BC2D Extract Zip Spec      14 (20) '2.0'\n+0BC2E Extract OS            00 (0) 'MS-DOS'\n+0BC2F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0BADD Compression Method    0008 (8) 'Deflated'\n-0BADF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0BAE3 CRC                   650D189A (1695357082)\n-0BAE7 Compressed Size       000005BF (1471)\n-0BAEB Uncompressed Size     00001832 (6194)\n-0BAEF Filename Length       0044 (68)\n-0BAF1 Extra Length          0000 (0)\n-0BAF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0BC31 Compression Method    0008 (8) 'Deflated'\n+0BC33 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0BC37 CRC                   D32166A2 (3542181538)\n+0BC3B Compressed Size       000005C7 (1479)\n+0BC3F Uncompressed Size     000018C4 (6340)\n+0BC43 Filename Length       0044 (68)\n+0BC45 Extra Length          0000 (0)\n+0BC47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xBAF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xBC47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0BB37 PAYLOAD\n+0BC8B PAYLOAD\n \n-0C0F6 LOCAL HEADER #58      04034B50 (67324752)\n-0C0FA Extract Zip Spec      14 (20) '2.0'\n-0C0FB Extract OS            00 (0) 'MS-DOS'\n-0C0FC General Purpose Flag  0800 (2048)\n+0C252 LOCAL HEADER #58      04034B50 (67324752)\n+0C256 Extract Zip Spec      14 (20) '2.0'\n+0C257 Extract OS            00 (0) 'MS-DOS'\n+0C258 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C0FE Compression Method    0008 (8) 'Deflated'\n-0C100 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0C104 CRC                   4BF9C614 (1274660372)\n-0C108 Compressed Size       000002C3 (707)\n-0C10C Uncompressed Size     000005BC (1468)\n-0C110 Filename Length       0045 (69)\n-0C112 Extra Length          0000 (0)\n-0C114 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C25A Compression Method    0008 (8) 'Deflated'\n+0C25C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0C260 CRC                   F4B90302 (4105765634)\n+0C264 Compressed Size       000002CA (714)\n+0C268 Uncompressed Size     000005E9 (1513)\n+0C26C Filename Length       0045 (69)\n+0C26E Extra Length          0000 (0)\n+0C270 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC114: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC270: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C159 PAYLOAD\n+0C2B5 PAYLOAD\n \n-0C41C LOCAL HEADER #59      04034B50 (67324752)\n-0C420 Extract Zip Spec      14 (20) '2.0'\n-0C421 Extract OS            00 (0) 'MS-DOS'\n-0C422 General Purpose Flag  0800 (2048)\n+0C57F LOCAL HEADER #59      04034B50 (67324752)\n+0C583 Extract Zip Spec      14 (20) '2.0'\n+0C584 Extract OS            00 (0) 'MS-DOS'\n+0C585 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C424 Compression Method    0008 (8) 'Deflated'\n-0C426 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0C42A CRC                   78DAF5DB (2027615707)\n-0C42E Compressed Size       000004DB (1243)\n-0C432 Uncompressed Size     00000DB3 (3507)\n-0C436 Filename Length       0045 (69)\n-0C438 Extra Length          0000 (0)\n-0C43A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C587 Compression Method    0008 (8) 'Deflated'\n+0C589 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0C58D CRC                   EB53D86B (3948140651)\n+0C591 Compressed Size       000004E6 (1254)\n+0C595 Uncompressed Size     00000E11 (3601)\n+0C599 Filename Length       0045 (69)\n+0C59B Extra Length          0000 (0)\n+0C59D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC43A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC59D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C47F PAYLOAD\n+0C5E2 PAYLOAD\n \n-0C95A LOCAL HEADER #60      04034B50 (67324752)\n-0C95E Extract Zip Spec      14 (20) '2.0'\n-0C95F Extract OS            00 (0) 'MS-DOS'\n-0C960 General Purpose Flag  0800 (2048)\n+0CAC8 LOCAL HEADER #60      04034B50 (67324752)\n+0CACC Extract Zip Spec      14 (20) '2.0'\n+0CACD Extract OS            00 (0) 'MS-DOS'\n+0CACE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C962 Compression Method    0008 (8) 'Deflated'\n-0C964 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0C968 CRC                   F812A548 (4161971528)\n-0C96C Compressed Size       00000636 (1590)\n-0C970 Uncompressed Size     00001C13 (7187)\n-0C974 Filename Length       0045 (69)\n-0C976 Extra Length          0000 (0)\n-0C978 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0CAD0 Compression Method    0008 (8) 'Deflated'\n+0CAD2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0CAD6 CRC                   29BE548C (700339340)\n+0CADA Compressed Size       0000063F (1599)\n+0CADE Uncompressed Size     00001CAF (7343)\n+0CAE2 Filename Length       0045 (69)\n+0CAE4 Extra Length          0000 (0)\n+0CAE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC978: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C9BD PAYLOAD\n+0CB2B PAYLOAD\n \n-0CFF3 LOCAL HEADER #61      04034B50 (67324752)\n-0CFF7 Extract Zip Spec      14 (20) '2.0'\n-0CFF8 Extract OS            00 (0) 'MS-DOS'\n-0CFF9 General Purpose Flag  0800 (2048)\n+0D16A LOCAL HEADER #61      04034B50 (67324752)\n+0D16E Extract Zip Spec      14 (20) '2.0'\n+0D16F Extract OS            00 (0) 'MS-DOS'\n+0D170 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0CFFB Compression Method    0008 (8) 'Deflated'\n-0CFFD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0D001 CRC                   D5E82AF6 (3588762358)\n-0D005 Compressed Size       000005E7 (1511)\n-0D009 Uncompressed Size     0000139A (5018)\n-0D00D Filename Length       0050 (80)\n-0D00F Extra Length          0000 (0)\n-0D011 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0D172 Compression Method    0008 (8) 'Deflated'\n+0D174 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0D178 CRC                   509E2681 (1352541825)\n+0D17C Compressed Size       000005F5 (1525)\n+0D180 Uncompressed Size     00001423 (5155)\n+0D184 Filename Length       0050 (80)\n+0D186 Extra Length          0000 (0)\n+0D188 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD011: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD188: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D061 PAYLOAD\n+0D1D8 PAYLOAD\n \n-0D648 LOCAL HEADER #62      04034B50 (67324752)\n-0D64C Extract Zip Spec      14 (20) '2.0'\n-0D64D Extract OS            00 (0) 'MS-DOS'\n-0D64E General Purpose Flag  0800 (2048)\n+0D7CD LOCAL HEADER #62      04034B50 (67324752)\n+0D7D1 Extract Zip Spec      14 (20) '2.0'\n+0D7D2 Extract OS            00 (0) 'MS-DOS'\n+0D7D3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0D650 Compression Method    0008 (8) 'Deflated'\n-0D652 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0D656 CRC                   CA23CF9D (3391344541)\n-0D65A Compressed Size       00000B88 (2952)\n-0D65E Uncompressed Size     00003C74 (15476)\n-0D662 Filename Length       0043 (67)\n-0D664 Extra Length          0000 (0)\n-0D666 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0D7D5 Compression Method    0008 (8) 'Deflated'\n+0D7D7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0D7DB CRC                   59E77649 (1508341321)\n+0D7DF Compressed Size       00000B95 (2965)\n+0D7E3 Uncompressed Size     00003E03 (15875)\n+0D7E7 Filename Length       0043 (67)\n+0D7E9 Extra Length          0000 (0)\n+0D7EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD666: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D6A9 PAYLOAD\n+0D82E PAYLOAD\n \n-0E231 LOCAL HEADER #63      04034B50 (67324752)\n-0E235 Extract Zip Spec      14 (20) '2.0'\n-0E236 Extract OS            00 (0) 'MS-DOS'\n-0E237 General Purpose Flag  0800 (2048)\n+0E3C3 LOCAL HEADER #63      04034B50 (67324752)\n+0E3C7 Extract Zip Spec      14 (20) '2.0'\n+0E3C8 Extract OS            00 (0) 'MS-DOS'\n+0E3C9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0E239 Compression Method    0008 (8) 'Deflated'\n-0E23B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0E23F CRC                   7D02909B (2097320091)\n-0E243 Compressed Size       0000009A (154)\n-0E247 Uncompressed Size     000002B1 (689)\n-0E24B Filename Length       0065 (101)\n-0E24D Extra Length          0000 (0)\n-0E24F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0E3CB Compression Method    0008 (8) 'Deflated'\n+0E3CD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0E3D1 CRC                   6A2B9F74 (1781243764)\n+0E3D5 Compressed Size       0000009D (157)\n+0E3D9 Uncompressed Size     000002B7 (695)\n+0E3DD Filename Length       0065 (101)\n+0E3DF Extra Length          0000 (0)\n+0E3E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xE24F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xE3E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E2B4 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                            XXXXXXXXXXXXXXXXXXXXX\n+0E446 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                            XXXXXXXXXXXXXXXXXXXXXXXX\n \n-0E34E LOCAL HEADER #64      04034B50 (67324752)\n-0E352 Extract Zip Spec      14 (20) '2.0'\n-0E353 Extract OS            00 (0) 'MS-DOS'\n-0E354 General Purpose Flag  0800 (2048)\n+0E4E3 LOCAL HEADER #64      04034B50 (67324752)\n+0E4E7 Extract Zip Spec      14 (20) '2.0'\n+0E4E8 Extract OS            00 (0) 'MS-DOS'\n+0E4E9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0E356 Compression Method    0008 (8) 'Deflated'\n-0E358 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0E35C CRC                   4B8794AA (1267176618)\n-0E360 Compressed Size       000000DF (223)\n-0E364 Uncompressed Size     00000365 (869)\n-0E368 Filename Length       006E (110)\n-0E36A Extra Length          0000 (0)\n-0E36C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0E4EB Compression Method    0008 (8) 'Deflated'\n+0E4ED Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0E4F1 CRC                   64601D37 (1684020535)\n+0E4F5 Compressed Size       000000E4 (228)\n+0E4F9 Uncompressed Size     0000036E (878)\n+0E4FD Filename Length       006E (110)\n+0E4FF Extra Length          0000 (0)\n+0E501 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xE36C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xE501: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E3DA PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0E56F PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0E4B9 LOCAL HEADER #65      04034B50 (67324752)\n-0E4BD Extract Zip Spec      14 (20) '2.0'\n-0E4BE Extract OS            00 (0) 'MS-DOS'\n-0E4BF General Purpose Flag  0800 (2048)\n+0E653 LOCAL HEADER #65      04034B50 (67324752)\n+0E657 Extract Zip Spec      14 (20) '2.0'\n+0E658 Extract OS            00 (0) 'MS-DOS'\n+0E659 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0E4C1 Compression Method    0008 (8) 'Deflated'\n-0E4C3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0E4C7 CRC                   26007615 (637564437)\n-0E4CB Compressed Size       00000081 (129)\n-0E4CF Uncompressed Size     0000013A (314)\n-0E4D3 Filename Length       0068 (104)\n-0E4D5 Extra Length          0000 (0)\n-0E4D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0E65B Compression Method    0008 (8) 'Deflated'\n+0E65D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0E661 CRC                   4EAEA219 (1320067609)\n+0E665 Compressed Size       00000083 (131)\n+0E669 Uncompressed Size     0000013C (316)\n+0E66D Filename Length       0068 (104)\n+0E66F Extra Length          0000 (0)\n+0E671 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xE4D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xE671: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E53F PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0E6D9 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0E5C0 LOCAL HEADER #66      04034B50 (67324752)\n-0E5C4 Extract Zip Spec      14 (20) '2.0'\n-0E5C5 Extract OS            00 (0) 'MS-DOS'\n-0E5C6 General Purpose Flag  0800 (2048)\n+0E75C LOCAL HEADER #66      04034B50 (67324752)\n+0E760 Extract Zip Spec      14 (20) '2.0'\n+0E761 Extract OS            00 (0) 'MS-DOS'\n+0E762 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0E5C8 Compression Method    0008 (8) 'Deflated'\n-0E5CA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0E5CE CRC                   4D28F6B5 (1294530229)\n-0E5D2 Compressed Size       0000005A (90)\n-0E5D6 Uncompressed Size     000000B9 (185)\n-0E5DA Filename Length       0037 (55)\n-0E5DC Extra Length          0000 (0)\n-0E5DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0E764 Compression Method    0008 (8) 'Deflated'\n+0E766 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0E76A CRC                   258A92FD (629838589)\n+0E76E Compressed Size       0000005B (91)\n+0E772 Uncompressed Size     000000BB (187)\n+0E776 Filename Length       0037 (55)\n+0E778 Extra Length          0000 (0)\n+0E77A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xE5DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xE77A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E615 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0E7B1 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0E66F LOCAL HEADER #67      04034B50 (67324752)\n-0E673 Extract Zip Spec      14 (20) '2.0'\n-0E674 Extract OS            00 (0) 'MS-DOS'\n-0E675 General Purpose Flag  0800 (2048)\n+0E80C LOCAL HEADER #67      04034B50 (67324752)\n+0E810 Extract Zip Spec      14 (20) '2.0'\n+0E811 Extract OS            00 (0) 'MS-DOS'\n+0E812 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0E677 Compression Method    0008 (8) 'Deflated'\n-0E679 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0E67D CRC                   E5DF924E (3856634446)\n-0E681 Compressed Size       000004C9 (1225)\n-0E685 Uncompressed Size     000017BA (6074)\n-0E689 Filename Length       0040 (64)\n-0E68B Extra Length          0000 (0)\n-0E68D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0E814 Compression Method    0008 (8) 'Deflated'\n+0E816 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0E81A CRC                   72E0714C (1927311692)\n+0E81E Compressed Size       000004C4 (1220)\n+0E822 Uncompressed Size     00001712 (5906)\n+0E826 Filename Length       0040 (64)\n+0E828 Extra Length          0000 (0)\n+0E82A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xE68D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xE82A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E6CD PAYLOAD\n+0E86A PAYLOAD\n \n-0EB96 LOCAL HEADER #68      04034B50 (67324752)\n-0EB9A Extract Zip Spec      14 (20) '2.0'\n-0EB9B Extract OS            00 (0) 'MS-DOS'\n-0EB9C General Purpose Flag  0800 (2048)\n+0ED2E LOCAL HEADER #68      04034B50 (67324752)\n+0ED32 Extract Zip Spec      14 (20) '2.0'\n+0ED33 Extract OS            00 (0) 'MS-DOS'\n+0ED34 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0EB9E Compression Method    0008 (8) 'Deflated'\n-0EBA0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EBA4 CRC                   619C8D42 (1637649730)\n-0EBA8 Compressed Size       0000004B (75)\n-0EBAC Uncompressed Size     0000004F (79)\n-0EBB0 Filename Length       0047 (71)\n-0EBB2 Extra Length          0000 (0)\n-0EBB4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0ED36 Compression Method    0008 (8) 'Deflated'\n+0ED38 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0ED3C CRC                   619C8D42 (1637649730)\n+0ED40 Compressed Size       0000004B (75)\n+0ED44 Uncompressed Size     0000004F (79)\n+0ED48 Filename Length       0047 (71)\n+0ED4A Extra Length          0000 (0)\n+0ED4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEBB4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xED4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0EBFB PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0ED93 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0EC46 CENTRAL HEADER #1     02014B50 (33639248)\n-0EC4A Created Zip Spec      14 (20) '2.0'\n-0EC4B Created OS            03 (3) 'Unix'\n-0EC4C Extract Zip Spec      14 (20) '2.0'\n-0EC4D Extract OS            00 (0) 'MS-DOS'\n-0EC4E General Purpose Flag  0800 (2048)\n+0EDDE CENTRAL HEADER #1     02014B50 (33639248)\n+0EDE2 Created Zip Spec      14 (20) '2.0'\n+0EDE3 Created OS            03 (3) 'Unix'\n+0EDE4 Extract Zip Spec      14 (20) '2.0'\n+0EDE5 Extract OS            00 (0) 'MS-DOS'\n+0EDE6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0EC50 Compression Method    0008 (8) 'Deflated'\n-0EC52 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EC56 CRC                   A689EB18 (2794056472)\n-0EC5A Compressed Size       00000042 (66)\n-0EC5E Uncompressed Size     00000040 (64)\n-0EC62 Filename Length       0014 (20)\n-0EC64 Extra Length          0000 (0)\n-0EC66 Comment Length        0000 (0)\n-0EC68 Disk Start            0000 (0)\n-0EC6A Int File Attributes   0000 (0)\n+0EDE8 Compression Method    0008 (8) 'Deflated'\n+0EDEA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EDEE CRC                   A689EB18 (2794056472)\n+0EDF2 Compressed Size       00000042 (66)\n+0EDF6 Uncompressed Size     00000040 (64)\n+0EDFA Filename Length       0014 (20)\n+0EDFC Extra Length          0000 (0)\n+0EDFE Comment Length        0000 (0)\n+0EE00 Disk Start            0000 (0)\n+0EE02 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0EC6C Ext File Attributes   81A40000 (2175008768)\n+0EE04 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0EC70 Local Header Offset   00000000 (0)\n-0EC74 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+0EE08 Local Header Offset   00000000 (0)\n+0EE0C Filename              'XXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEC74: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEE0C: Filename 'XXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0EC88 CENTRAL HEADER #2     02014B50 (33639248)\n-0EC8C Created Zip Spec      14 (20) '2.0'\n-0EC8D Created OS            03 (3) 'Unix'\n-0EC8E Extract Zip Spec      0A (10) '1.0'\n-0EC8F Extract OS            00 (0) 'MS-DOS'\n-0EC90 General Purpose Flag  0800 (2048)\n+0EE20 CENTRAL HEADER #2     02014B50 (33639248)\n+0EE24 Created Zip Spec      14 (20) '2.0'\n+0EE25 Created OS            03 (3) 'Unix'\n+0EE26 Extract Zip Spec      0A (10) '1.0'\n+0EE27 Extract OS            00 (0) 'MS-DOS'\n+0EE28 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0EC92 Compression Method    0000 (0) 'Stored'\n-0EC94 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EC98 CRC                   00000000 (0)\n-0EC9C Compressed Size       00000000 (0)\n-0ECA0 Uncompressed Size     00000000 (0)\n-0ECA4 Filename Length       0009 (9)\n-0ECA6 Extra Length          0000 (0)\n-0ECA8 Comment Length        0000 (0)\n-0ECAA Disk Start            0000 (0)\n-0ECAC Int File Attributes   0000 (0)\n+0EE2A Compression Method    0000 (0) 'Stored'\n+0EE2C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EE30 CRC                   00000000 (0)\n+0EE34 Compressed Size       00000000 (0)\n+0EE38 Uncompressed Size     00000000 (0)\n+0EE3C Filename Length       0009 (9)\n+0EE3E Extra Length          0000 (0)\n+0EE40 Comment Length        0000 (0)\n+0EE42 Disk Start            0000 (0)\n+0EE44 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0ECAE Ext File Attributes   41ED0010 (1106051088)\n+0EE46 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0ECB2 Local Header Offset   00000074 (116)\n-0ECB6 Filename              'XXXXXXXXX'\n+0EE4A Local Header Offset   00000074 (116)\n+0EE4E Filename              'XXXXXXXXX'\n #\n-# WARNING: Offset 0xECB6: Filename 'XXXXXXXXX'\n+# WARNING: Offset 0xEE4E: Filename 'XXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xECB6: Directory 'XXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xEE4E: Directory 'XXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xEC8E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n+# WARNING: Offset 0xEE26: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n #\n \n-0ECBF CENTRAL HEADER #3     02014B50 (33639248)\n-0ECC3 Created Zip Spec      14 (20) '2.0'\n-0ECC4 Created OS            03 (3) 'Unix'\n-0ECC5 Extract Zip Spec      0A (10) '1.0'\n-0ECC6 Extract OS            00 (0) 'MS-DOS'\n-0ECC7 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0ECC9 Compression Method    0000 (0) 'Stored'\n-0ECCB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0ECCF CRC                   00000000 (0)\n-0ECD3 Compressed Size       00000000 (0)\n-0ECD7 Uncompressed Size     00000000 (0)\n-0ECDB Filename Length       0004 (4)\n-0ECDD Extra Length          0000 (0)\n-0ECDF Comment Length        0000 (0)\n-0ECE1 Disk Start            0000 (0)\n-0ECE3 Int File Attributes   0000 (0)\n+0EE57 CENTRAL HEADER #3     02014B50 (33639248)\n+0EE5B Created Zip Spec      14 (20) '2.0'\n+0EE5C Created OS            03 (3) 'Unix'\n+0EE5D Extract Zip Spec      0A (10) '1.0'\n+0EE5E Extract OS            00 (0) 'MS-DOS'\n+0EE5F General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0EE61 Compression Method    0000 (0) 'Stored'\n+0EE63 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EE67 CRC                   00000000 (0)\n+0EE6B Compressed Size       00000000 (0)\n+0EE6F Uncompressed Size     00000000 (0)\n+0EE73 Filename Length       0004 (4)\n+0EE75 Extra Length          0000 (0)\n+0EE77 Comment Length        0000 (0)\n+0EE79 Disk Start            0000 (0)\n+0EE7B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0ECE5 Ext File Attributes   41ED0010 (1106051088)\n+0EE7D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0ECE9 Local Header Offset   0000009B (155)\n-0ECED Filename              'XXXX'\n+0EE81 Local Header Offset   0000009B (155)\n+0EE85 Filename              'XXXX'\n #\n-# WARNING: Offset 0xECED: Filename 'XXXX'\n+# WARNING: Offset 0xEE85: Filename 'XXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xECED: Directory 'XXXX' must end in a '/'\n+# ERROR: Offset 0xEE85: Directory 'XXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xECC5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n+# WARNING: Offset 0xEE5D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n #\n \n-0ECF1 CENTRAL HEADER #4     02014B50 (33639248)\n-0ECF5 Created Zip Spec      14 (20) '2.0'\n-0ECF6 Created OS            03 (3) 'Unix'\n-0ECF7 Extract Zip Spec      0A (10) '1.0'\n-0ECF8 Extract OS            00 (0) 'MS-DOS'\n-0ECF9 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0ECFB Compression Method    0000 (0) 'Stored'\n-0ECFD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0ED01 CRC                   00000000 (0)\n-0ED05 Compressed Size       00000000 (0)\n-0ED09 Uncompressed Size     00000000 (0)\n-0ED0D Filename Length       000B (11)\n-0ED0F Extra Length          0000 (0)\n-0ED11 Comment Length        0000 (0)\n-0ED13 Disk Start            0000 (0)\n-0ED15 Int File Attributes   0000 (0)\n+0EE89 CENTRAL HEADER #4     02014B50 (33639248)\n+0EE8D Created Zip Spec      14 (20) '2.0'\n+0EE8E Created OS            03 (3) 'Unix'\n+0EE8F Extract Zip Spec      0A (10) '1.0'\n+0EE90 Extract OS            00 (0) 'MS-DOS'\n+0EE91 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0EE93 Compression Method    0000 (0) 'Stored'\n+0EE95 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EE99 CRC                   00000000 (0)\n+0EE9D Compressed Size       00000000 (0)\n+0EEA1 Uncompressed Size     00000000 (0)\n+0EEA5 Filename Length       000B (11)\n+0EEA7 Extra Length          0000 (0)\n+0EEA9 Comment Length        0000 (0)\n+0EEAB Disk Start            0000 (0)\n+0EEAD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0ED17 Ext File Attributes   41ED0010 (1106051088)\n+0EEAF Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0ED1B Local Header Offset   000000BD (189)\n-0ED1F Filename              'XXXXXXXXXXX'\n+0EEB3 Local Header Offset   000000BD (189)\n+0EEB7 Filename              'XXXXXXXXXXX'\n #\n-# WARNING: Offset 0xED1F: Filename 'XXXXXXXXXXX'\n+# WARNING: Offset 0xEEB7: Filename 'XXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xED1F: Directory 'XXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xEEB7: Directory 'XXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xECF7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n+# WARNING: Offset 0xEE8F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n #\n \n-0ED2A CENTRAL HEADER #5     02014B50 (33639248)\n-0ED2E Created Zip Spec      14 (20) '2.0'\n-0ED2F Created OS            03 (3) 'Unix'\n-0ED30 Extract Zip Spec      0A (10) '1.0'\n-0ED31 Extract OS            00 (0) 'MS-DOS'\n-0ED32 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0ED34 Compression Method    0000 (0) 'Stored'\n-0ED36 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0ED3A CRC                   00000000 (0)\n-0ED3E Compressed Size       00000000 (0)\n-0ED42 Uncompressed Size     00000000 (0)\n-0ED46 Filename Length       0011 (17)\n-0ED48 Extra Length          0000 (0)\n-0ED4A Comment Length        0000 (0)\n-0ED4C Disk Start            0000 (0)\n-0ED4E Int File Attributes   0000 (0)\n+0EEC2 CENTRAL HEADER #5     02014B50 (33639248)\n+0EEC6 Created Zip Spec      14 (20) '2.0'\n+0EEC7 Created OS            03 (3) 'Unix'\n+0EEC8 Extract Zip Spec      0A (10) '1.0'\n+0EEC9 Extract OS            00 (0) 'MS-DOS'\n+0EECA General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0EECC Compression Method    0000 (0) 'Stored'\n+0EECE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EED2 CRC                   00000000 (0)\n+0EED6 Compressed Size       00000000 (0)\n+0EEDA Uncompressed Size     00000000 (0)\n+0EEDE Filename Length       0011 (17)\n+0EEE0 Extra Length          0000 (0)\n+0EEE2 Comment Length        0000 (0)\n+0EEE4 Disk Start            0000 (0)\n+0EEE6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0ED50 Ext File Attributes   41ED0010 (1106051088)\n+0EEE8 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0ED54 Local Header Offset   000000E6 (230)\n-0ED58 Filename              'XXXXXXXXXXXXXXXXX'\n+0EEEC Local Header Offset   000000E6 (230)\n+0EEF0 Filename              'XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xED58: Filename 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEEF0: Filename 'XXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xED58: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xEEF0: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xED30: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEEC8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n #\n \n-0ED69 CENTRAL HEADER #6     02014B50 (33639248)\n-0ED6D Created Zip Spec      14 (20) '2.0'\n-0ED6E Created OS            03 (3) 'Unix'\n-0ED6F Extract Zip Spec      0A (10) '1.0'\n-0ED70 Extract OS            00 (0) 'MS-DOS'\n-0ED71 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0ED73 Compression Method    0000 (0) 'Stored'\n-0ED75 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0ED79 CRC                   00000000 (0)\n-0ED7D Compressed Size       00000000 (0)\n-0ED81 Uncompressed Size     00000000 (0)\n-0ED85 Filename Length       001A (26)\n-0ED87 Extra Length          0000 (0)\n-0ED89 Comment Length        0000 (0)\n-0ED8B Disk Start            0000 (0)\n-0ED8D Int File Attributes   0000 (0)\n+0EF01 CENTRAL HEADER #6     02014B50 (33639248)\n+0EF05 Created Zip Spec      14 (20) '2.0'\n+0EF06 Created OS            03 (3) 'Unix'\n+0EF07 Extract Zip Spec      0A (10) '1.0'\n+0EF08 Extract OS            00 (0) 'MS-DOS'\n+0EF09 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0EF0B Compression Method    0000 (0) 'Stored'\n+0EF0D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EF11 CRC                   00000000 (0)\n+0EF15 Compressed Size       00000000 (0)\n+0EF19 Uncompressed Size     00000000 (0)\n+0EF1D Filename Length       001A (26)\n+0EF1F Extra Length          0000 (0)\n+0EF21 Comment Length        0000 (0)\n+0EF23 Disk Start            0000 (0)\n+0EF25 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0ED8F Ext File Attributes   41ED0010 (1106051088)\n+0EF27 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0ED93 Local Header Offset   00000115 (277)\n-0ED97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0EF2B Local Header Offset   00000115 (277)\n+0EF2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xED97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEF2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xED97: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xEF2F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xED6F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEF07: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0EDB1 CENTRAL HEADER #7     02014B50 (33639248)\n-0EDB5 Created Zip Spec      14 (20) '2.0'\n-0EDB6 Created OS            03 (3) 'Unix'\n-0EDB7 Extract Zip Spec      0A (10) '1.0'\n-0EDB8 Extract OS            00 (0) 'MS-DOS'\n-0EDB9 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0EDBB Compression Method    0000 (0) 'Stored'\n-0EDBD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EDC1 CRC                   00000000 (0)\n-0EDC5 Compressed Size       00000000 (0)\n-0EDC9 Uncompressed Size     00000000 (0)\n-0EDCD Filename Length       0025 (37)\n-0EDCF Extra Length          0000 (0)\n-0EDD1 Comment Length        0000 (0)\n-0EDD3 Disk Start            0000 (0)\n-0EDD5 Int File Attributes   0000 (0)\n+0EF49 CENTRAL HEADER #7     02014B50 (33639248)\n+0EF4D Created Zip Spec      14 (20) '2.0'\n+0EF4E Created OS            03 (3) 'Unix'\n+0EF4F Extract Zip Spec      0A (10) '1.0'\n+0EF50 Extract OS            00 (0) 'MS-DOS'\n+0EF51 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0EF53 Compression Method    0000 (0) 'Stored'\n+0EF55 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EF59 CRC                   00000000 (0)\n+0EF5D Compressed Size       00000000 (0)\n+0EF61 Uncompressed Size     00000000 (0)\n+0EF65 Filename Length       0025 (37)\n+0EF67 Extra Length          0000 (0)\n+0EF69 Comment Length        0000 (0)\n+0EF6B Disk Start            0000 (0)\n+0EF6D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0EDD7 Ext File Attributes   41ED0010 (1106051088)\n+0EF6F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0EDDB Local Header Offset   0000014D (333)\n-0EDDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0EF73 Local Header Offset   0000014D (333)\n+0EF77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEDDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEF77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xEDDF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xEF77: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xEDB7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEF4F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0EE04 CENTRAL HEADER #8     02014B50 (33639248)\n-0EE08 Created Zip Spec      14 (20) '2.0'\n-0EE09 Created OS            03 (3) 'Unix'\n-0EE0A Extract Zip Spec      0A (10) '1.0'\n-0EE0B Extract OS            00 (0) 'MS-DOS'\n-0EE0C General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0EE0E Compression Method    0000 (0) 'Stored'\n-0EE10 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EE14 CRC                   00000000 (0)\n-0EE18 Compressed Size       00000000 (0)\n-0EE1C Uncompressed Size     00000000 (0)\n-0EE20 Filename Length       0030 (48)\n-0EE22 Extra Length          0000 (0)\n-0EE24 Comment Length        0000 (0)\n-0EE26 Disk Start            0000 (0)\n-0EE28 Int File Attributes   0000 (0)\n+0EF9C CENTRAL HEADER #8     02014B50 (33639248)\n+0EFA0 Created Zip Spec      14 (20) '2.0'\n+0EFA1 Created OS            03 (3) 'Unix'\n+0EFA2 Extract Zip Spec      0A (10) '1.0'\n+0EFA3 Extract OS            00 (0) 'MS-DOS'\n+0EFA4 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0EFA6 Compression Method    0000 (0) 'Stored'\n+0EFA8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EFAC CRC                   00000000 (0)\n+0EFB0 Compressed Size       00000000 (0)\n+0EFB4 Uncompressed Size     00000000 (0)\n+0EFB8 Filename Length       0030 (48)\n+0EFBA Extra Length          0000 (0)\n+0EFBC Comment Length        0000 (0)\n+0EFBE Disk Start            0000 (0)\n+0EFC0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0EE2A Ext File Attributes   41ED0010 (1106051088)\n+0EFC2 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0EE2E Local Header Offset   00000190 (400)\n-0EE32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0EFC6 Local Header Offset   00000190 (400)\n+0EFCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEE32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEFCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xEE32: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xEFCA: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xEE0A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEFA2: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0EE62 CENTRAL HEADER #9     02014B50 (33639248)\n-0EE66 Created Zip Spec      14 (20) '2.0'\n-0EE67 Created OS            03 (3) 'Unix'\n-0EE68 Extract Zip Spec      0A (10) '1.0'\n-0EE69 Extract OS            00 (0) 'MS-DOS'\n-0EE6A General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0EE6C Compression Method    0000 (0) 'Stored'\n-0EE6E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EE72 CRC                   00000000 (0)\n-0EE76 Compressed Size       00000000 (0)\n-0EE7A Uncompressed Size     00000000 (0)\n-0EE7E Filename Length       0038 (56)\n-0EE80 Extra Length          0000 (0)\n-0EE82 Comment Length        0000 (0)\n-0EE84 Disk Start            0000 (0)\n-0EE86 Int File Attributes   0000 (0)\n+0EFFA CENTRAL HEADER #9     02014B50 (33639248)\n+0EFFE Created Zip Spec      14 (20) '2.0'\n+0EFFF Created OS            03 (3) 'Unix'\n+0F000 Extract Zip Spec      0A (10) '1.0'\n+0F001 Extract OS            00 (0) 'MS-DOS'\n+0F002 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F004 Compression Method    0000 (0) 'Stored'\n+0F006 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F00A CRC                   00000000 (0)\n+0F00E Compressed Size       00000000 (0)\n+0F012 Uncompressed Size     00000000 (0)\n+0F016 Filename Length       0038 (56)\n+0F018 Extra Length          0000 (0)\n+0F01A Comment Length        0000 (0)\n+0F01C Disk Start            0000 (0)\n+0F01E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0EE88 Ext File Attributes   41ED0010 (1106051088)\n+0F020 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0EE8C Local Header Offset   000001DE (478)\n-0EE90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F024 Local Header Offset   000001DE (478)\n+0F028 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEE90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF028: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xEE90: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF028: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xEE68: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF000: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0EEC8 CENTRAL HEADER #10    02014B50 (33639248)\n-0EECC Created Zip Spec      14 (20) '2.0'\n-0EECD Created OS            03 (3) 'Unix'\n-0EECE Extract Zip Spec      0A (10) '1.0'\n-0EECF Extract OS            00 (0) 'MS-DOS'\n-0EED0 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0EED2 Compression Method    0000 (0) 'Stored'\n-0EED4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EED8 CRC                   00000000 (0)\n-0EEDC Compressed Size       00000000 (0)\n-0EEE0 Uncompressed Size     00000000 (0)\n-0EEE4 Filename Length       0035 (53)\n-0EEE6 Extra Length          0000 (0)\n-0EEE8 Comment Length        0000 (0)\n-0EEEA Disk Start            0000 (0)\n-0EEEC Int File Attributes   0000 (0)\n+0F060 CENTRAL HEADER #10    02014B50 (33639248)\n+0F064 Created Zip Spec      14 (20) '2.0'\n+0F065 Created OS            03 (3) 'Unix'\n+0F066 Extract Zip Spec      0A (10) '1.0'\n+0F067 Extract OS            00 (0) 'MS-DOS'\n+0F068 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F06A Compression Method    0000 (0) 'Stored'\n+0F06C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F070 CRC                   00000000 (0)\n+0F074 Compressed Size       00000000 (0)\n+0F078 Uncompressed Size     00000000 (0)\n+0F07C Filename Length       0035 (53)\n+0F07E Extra Length          0000 (0)\n+0F080 Comment Length        0000 (0)\n+0F082 Disk Start            0000 (0)\n+0F084 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0EEEE Ext File Attributes   41ED0010 (1106051088)\n+0F086 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0EEF2 Local Header Offset   00000234 (564)\n-0EEF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F08A Local Header Offset   00000234 (564)\n+0F08E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEEF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF08E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xEEF6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF08E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xEECE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF066: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0EF2B CENTRAL HEADER #11    02014B50 (33639248)\n-0EF2F Created Zip Spec      14 (20) '2.0'\n-0EF30 Created OS            03 (3) 'Unix'\n-0EF31 Extract Zip Spec      0A (10) '1.0'\n-0EF32 Extract OS            00 (0) 'MS-DOS'\n-0EF33 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0EF35 Compression Method    0000 (0) 'Stored'\n-0EF37 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EF3B CRC                   00000000 (0)\n-0EF3F Compressed Size       00000000 (0)\n-0EF43 Uncompressed Size     00000000 (0)\n-0EF47 Filename Length       003B (59)\n-0EF49 Extra Length          0000 (0)\n-0EF4B Comment Length        0000 (0)\n-0EF4D Disk Start            0000 (0)\n-0EF4F Int File Attributes   0000 (0)\n+0F0C3 CENTRAL HEADER #11    02014B50 (33639248)\n+0F0C7 Created Zip Spec      14 (20) '2.0'\n+0F0C8 Created OS            03 (3) 'Unix'\n+0F0C9 Extract Zip Spec      0A (10) '1.0'\n+0F0CA Extract OS            00 (0) 'MS-DOS'\n+0F0CB General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F0CD Compression Method    0000 (0) 'Stored'\n+0F0CF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F0D3 CRC                   00000000 (0)\n+0F0D7 Compressed Size       00000000 (0)\n+0F0DB Uncompressed Size     00000000 (0)\n+0F0DF Filename Length       003B (59)\n+0F0E1 Extra Length          0000 (0)\n+0F0E3 Comment Length        0000 (0)\n+0F0E5 Disk Start            0000 (0)\n+0F0E7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0EF51 Ext File Attributes   41ED0010 (1106051088)\n+0F0E9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0EF55 Local Header Offset   00000287 (647)\n-0EF59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F0ED Local Header Offset   00000287 (647)\n+0F0F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEF59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF0F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xEF59: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF0F1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xEF31: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF0C9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0EF94 CENTRAL HEADER #12    02014B50 (33639248)\n-0EF98 Created Zip Spec      14 (20) '2.0'\n-0EF99 Created OS            03 (3) 'Unix'\n-0EF9A Extract Zip Spec      0A (10) '1.0'\n-0EF9B Extract OS            00 (0) 'MS-DOS'\n-0EF9C General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0EF9E Compression Method    0000 (0) 'Stored'\n-0EFA0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EFA4 CRC                   00000000 (0)\n-0EFA8 Compressed Size       00000000 (0)\n-0EFAC Uncompressed Size     00000000 (0)\n-0EFB0 Filename Length       003F (63)\n-0EFB2 Extra Length          0000 (0)\n-0EFB4 Comment Length        0000 (0)\n-0EFB6 Disk Start            0000 (0)\n-0EFB8 Int File Attributes   0000 (0)\n+0F12C CENTRAL HEADER #12    02014B50 (33639248)\n+0F130 Created Zip Spec      14 (20) '2.0'\n+0F131 Created OS            03 (3) 'Unix'\n+0F132 Extract Zip Spec      0A (10) '1.0'\n+0F133 Extract OS            00 (0) 'MS-DOS'\n+0F134 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F136 Compression Method    0000 (0) 'Stored'\n+0F138 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F13C CRC                   00000000 (0)\n+0F140 Compressed Size       00000000 (0)\n+0F144 Uncompressed Size     00000000 (0)\n+0F148 Filename Length       003F (63)\n+0F14A Extra Length          0000 (0)\n+0F14C Comment Length        0000 (0)\n+0F14E Disk Start            0000 (0)\n+0F150 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0EFBA Ext File Attributes   41ED0010 (1106051088)\n+0F152 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0EFBE Local Header Offset   000002E0 (736)\n-0EFC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F156 Local Header Offset   000002E0 (736)\n+0F15A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEFC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF15A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xEFC2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF15A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xEF9A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF132: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F001 CENTRAL HEADER #13    02014B50 (33639248)\n-0F005 Created Zip Spec      14 (20) '2.0'\n-0F006 Created OS            03 (3) 'Unix'\n-0F007 Extract Zip Spec      0A (10) '1.0'\n-0F008 Extract OS            00 (0) 'MS-DOS'\n-0F009 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0F00B Compression Method    0000 (0) 'Stored'\n-0F00D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F011 CRC                   00000000 (0)\n-0F015 Compressed Size       00000000 (0)\n-0F019 Uncompressed Size     00000000 (0)\n-0F01D Filename Length       0035 (53)\n-0F01F Extra Length          0000 (0)\n-0F021 Comment Length        0000 (0)\n-0F023 Disk Start            0000 (0)\n-0F025 Int File Attributes   0000 (0)\n+0F199 CENTRAL HEADER #13    02014B50 (33639248)\n+0F19D Created Zip Spec      14 (20) '2.0'\n+0F19E Created OS            03 (3) 'Unix'\n+0F19F Extract Zip Spec      0A (10) '1.0'\n+0F1A0 Extract OS            00 (0) 'MS-DOS'\n+0F1A1 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F1A3 Compression Method    0000 (0) 'Stored'\n+0F1A5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F1A9 CRC                   00000000 (0)\n+0F1AD Compressed Size       00000000 (0)\n+0F1B1 Uncompressed Size     00000000 (0)\n+0F1B5 Filename Length       0035 (53)\n+0F1B7 Extra Length          0000 (0)\n+0F1B9 Comment Length        0000 (0)\n+0F1BB Disk Start            0000 (0)\n+0F1BD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F027 Ext File Attributes   41ED0010 (1106051088)\n+0F1BF Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F02B Local Header Offset   0000033D (829)\n-0F02F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F1C3 Local Header Offset   0000033D (829)\n+0F1C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF02F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF1C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF02F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF1C7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF007: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF19F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F064 CENTRAL HEADER #14    02014B50 (33639248)\n-0F068 Created Zip Spec      14 (20) '2.0'\n-0F069 Created OS            03 (3) 'Unix'\n-0F06A Extract Zip Spec      0A (10) '1.0'\n-0F06B Extract OS            00 (0) 'MS-DOS'\n-0F06C General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0F06E Compression Method    0000 (0) 'Stored'\n-0F070 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F074 CRC                   00000000 (0)\n-0F078 Compressed Size       00000000 (0)\n-0F07C Uncompressed Size     00000000 (0)\n-0F080 Filename Length       000F (15)\n-0F082 Extra Length          0000 (0)\n-0F084 Comment Length        0000 (0)\n-0F086 Disk Start            0000 (0)\n-0F088 Int File Attributes   0000 (0)\n+0F1FC CENTRAL HEADER #14    02014B50 (33639248)\n+0F200 Created Zip Spec      14 (20) '2.0'\n+0F201 Created OS            03 (3) 'Unix'\n+0F202 Extract Zip Spec      0A (10) '1.0'\n+0F203 Extract OS            00 (0) 'MS-DOS'\n+0F204 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F206 Compression Method    0000 (0) 'Stored'\n+0F208 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F20C CRC                   00000000 (0)\n+0F210 Compressed Size       00000000 (0)\n+0F214 Uncompressed Size     00000000 (0)\n+0F218 Filename Length       000F (15)\n+0F21A Extra Length          0000 (0)\n+0F21C Comment Length        0000 (0)\n+0F21E Disk Start            0000 (0)\n+0F220 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F08A Ext File Attributes   41ED0010 (1106051088)\n+0F222 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F08E Local Header Offset   00000390 (912)\n-0F092 Filename              'XXXXXXXXXXXXXXX'\n+0F226 Local Header Offset   00000390 (912)\n+0F22A Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF092: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF22A: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF092: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF22A: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF06A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF202: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-0F0A1 CENTRAL HEADER #15    02014B50 (33639248)\n-0F0A5 Created Zip Spec      14 (20) '2.0'\n-0F0A6 Created OS            03 (3) 'Unix'\n-0F0A7 Extract Zip Spec      0A (10) '1.0'\n-0F0A8 Extract OS            00 (0) 'MS-DOS'\n-0F0A9 General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0F0AB Compression Method    0000 (0) 'Stored'\n-0F0AD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F0B1 CRC                   00000000 (0)\n-0F0B5 Compressed Size       00000000 (0)\n-0F0B9 Uncompressed Size     00000000 (0)\n-0F0BD Filename Length       0018 (24)\n-0F0BF Extra Length          0000 (0)\n-0F0C1 Comment Length        0000 (0)\n-0F0C3 Disk Start            0000 (0)\n-0F0C5 Int File Attributes   0000 (0)\n+0F239 CENTRAL HEADER #15    02014B50 (33639248)\n+0F23D Created Zip Spec      14 (20) '2.0'\n+0F23E Created OS            03 (3) 'Unix'\n+0F23F Extract Zip Spec      0A (10) '1.0'\n+0F240 Extract OS            00 (0) 'MS-DOS'\n+0F241 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F243 Compression Method    0000 (0) 'Stored'\n+0F245 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F249 CRC                   00000000 (0)\n+0F24D Compressed Size       00000000 (0)\n+0F251 Uncompressed Size     00000000 (0)\n+0F255 Filename Length       0018 (24)\n+0F257 Extra Length          0000 (0)\n+0F259 Comment Length        0000 (0)\n+0F25B Disk Start            0000 (0)\n+0F25D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F0C7 Ext File Attributes   41ED0010 (1106051088)\n+0F25F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F0CB Local Header Offset   000003BD (957)\n-0F0CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+0F263 Local Header Offset   000003BD (957)\n+0F267 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF0CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF267: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF0CF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF267: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF0A7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF23F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F0E7 CENTRAL HEADER #16    02014B50 (33639248)\n-0F0EB Created Zip Spec      14 (20) '2.0'\n-0F0EC Created OS            03 (3) 'Unix'\n-0F0ED Extract Zip Spec      0A (10) '1.0'\n-0F0EE Extract OS            00 (0) 'MS-DOS'\n-0F0EF General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0F0F1 Compression Method    0000 (0) 'Stored'\n-0F0F3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F0F7 CRC                   00000000 (0)\n-0F0FB Compressed Size       00000000 (0)\n-0F0FF Uncompressed Size     00000000 (0)\n-0F103 Filename Length       0012 (18)\n-0F105 Extra Length          0000 (0)\n-0F107 Comment Length        0000 (0)\n-0F109 Disk Start            0000 (0)\n-0F10B Int File Attributes   0000 (0)\n+0F27F CENTRAL HEADER #16    02014B50 (33639248)\n+0F283 Created Zip Spec      14 (20) '2.0'\n+0F284 Created OS            03 (3) 'Unix'\n+0F285 Extract Zip Spec      0A (10) '1.0'\n+0F286 Extract OS            00 (0) 'MS-DOS'\n+0F287 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F289 Compression Method    0000 (0) 'Stored'\n+0F28B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F28F CRC                   00000000 (0)\n+0F293 Compressed Size       00000000 (0)\n+0F297 Uncompressed Size     00000000 (0)\n+0F29B Filename Length       0012 (18)\n+0F29D Extra Length          0000 (0)\n+0F29F Comment Length        0000 (0)\n+0F2A1 Disk Start            0000 (0)\n+0F2A3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F10D Ext File Attributes   41ED0010 (1106051088)\n+0F2A5 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F111 Local Header Offset   000003F3 (1011)\n-0F115 Filename              'XXXXXXXXXXXXXXXXXX'\n+0F2A9 Local Header Offset   000003F3 (1011)\n+0F2AD Filename              'XXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF115: Filename 'XXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF2AD: Filename 'XXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF115: Directory 'XXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF2AD: Directory 'XXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF0ED: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF285: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXX'\n #\n \n-0F127 CENTRAL HEADER #17    02014B50 (33639248)\n-0F12B Created Zip Spec      14 (20) '2.0'\n-0F12C Created OS            03 (3) 'Unix'\n-0F12D Extract Zip Spec      0A (10) '1.0'\n-0F12E Extract OS            00 (0) 'MS-DOS'\n-0F12F General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0F131 Compression Method    0000 (0) 'Stored'\n-0F133 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F137 CRC                   00000000 (0)\n-0F13B Compressed Size       00000000 (0)\n-0F13F Uncompressed Size     00000000 (0)\n-0F143 Filename Length       000F (15)\n-0F145 Extra Length          0000 (0)\n-0F147 Comment Length        0000 (0)\n-0F149 Disk Start            0000 (0)\n-0F14B Int File Attributes   0000 (0)\n+0F2BF CENTRAL HEADER #17    02014B50 (33639248)\n+0F2C3 Created Zip Spec      14 (20) '2.0'\n+0F2C4 Created OS            03 (3) 'Unix'\n+0F2C5 Extract Zip Spec      0A (10) '1.0'\n+0F2C6 Extract OS            00 (0) 'MS-DOS'\n+0F2C7 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F2C9 Compression Method    0000 (0) 'Stored'\n+0F2CB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F2CF CRC                   00000000 (0)\n+0F2D3 Compressed Size       00000000 (0)\n+0F2D7 Uncompressed Size     00000000 (0)\n+0F2DB Filename Length       000F (15)\n+0F2DD Extra Length          0000 (0)\n+0F2DF Comment Length        0000 (0)\n+0F2E1 Disk Start            0000 (0)\n+0F2E3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F14D Ext File Attributes   41ED0010 (1106051088)\n+0F2E5 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F151 Local Header Offset   00000423 (1059)\n-0F155 Filename              'XXXXXXXXXXXXXXX'\n+0F2E9 Local Header Offset   00000423 (1059)\n+0F2ED Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF155: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF2ED: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF155: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF2ED: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF12D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF2C5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-0F164 CENTRAL HEADER #18    02014B50 (33639248)\n-0F168 Created Zip Spec      14 (20) '2.0'\n-0F169 Created OS            03 (3) 'Unix'\n-0F16A Extract Zip Spec      0A (10) '1.0'\n-0F16B Extract OS            00 (0) 'MS-DOS'\n-0F16C General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0F16E Compression Method    0000 (0) 'Stored'\n-0F170 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F174 CRC                   00000000 (0)\n-0F178 Compressed Size       00000000 (0)\n-0F17C Uncompressed Size     00000000 (0)\n-0F180 Filename Length       0020 (32)\n-0F182 Extra Length          0000 (0)\n-0F184 Comment Length        0000 (0)\n-0F186 Disk Start            0000 (0)\n-0F188 Int File Attributes   0000 (0)\n+0F2FC CENTRAL HEADER #18    02014B50 (33639248)\n+0F300 Created Zip Spec      14 (20) '2.0'\n+0F301 Created OS            03 (3) 'Unix'\n+0F302 Extract Zip Spec      0A (10) '1.0'\n+0F303 Extract OS            00 (0) 'MS-DOS'\n+0F304 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F306 Compression Method    0000 (0) 'Stored'\n+0F308 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F30C CRC                   00000000 (0)\n+0F310 Compressed Size       00000000 (0)\n+0F314 Uncompressed Size     00000000 (0)\n+0F318 Filename Length       0020 (32)\n+0F31A Extra Length          0000 (0)\n+0F31C Comment Length        0000 (0)\n+0F31E Disk Start            0000 (0)\n+0F320 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F18A Ext File Attributes   41ED0010 (1106051088)\n+0F322 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F18E Local Header Offset   00000450 (1104)\n-0F192 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F326 Local Header Offset   00000450 (1104)\n+0F32A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF192: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF32A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF192: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF32A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF16A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF302: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F1B2 CENTRAL HEADER #19    02014B50 (33639248)\n-0F1B6 Created Zip Spec      14 (20) '2.0'\n-0F1B7 Created OS            03 (3) 'Unix'\n-0F1B8 Extract Zip Spec      0A (10) '1.0'\n-0F1B9 Extract OS            00 (0) 'MS-DOS'\n-0F1BA General Purpose Flag  0800 (2048)\n-      [Bit 11]              1 'Language Encoding'\n-0F1BC Compression Method    0000 (0) 'Stored'\n-0F1BE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F1C2 CRC                   00000000 (0)\n-0F1C6 Compressed Size       00000000 (0)\n-0F1CA Uncompressed Size     00000000 (0)\n-0F1CE Filename Length       0039 (57)\n-0F1D0 Extra Length          0000 (0)\n-0F1D2 Comment Length        0000 (0)\n-0F1D4 Disk Start            0000 (0)\n-0F1D6 Int File Attributes   0000 (0)\n+0F34A CENTRAL HEADER #19    02014B50 (33639248)\n+0F34E Created Zip Spec      14 (20) '2.0'\n+0F34F Created OS            03 (3) 'Unix'\n+0F350 Extract Zip Spec      0A (10) '1.0'\n+0F351 Extract OS            00 (0) 'MS-DOS'\n+0F352 General Purpose Flag  0800 (2048)\n+      [Bit 11]              1 'Language Encoding'\n+0F354 Compression Method    0000 (0) 'Stored'\n+0F356 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F35A CRC                   00000000 (0)\n+0F35E Compressed Size       00000000 (0)\n+0F362 Uncompressed Size     00000000 (0)\n+0F366 Filename Length       0039 (57)\n+0F368 Extra Length          0000 (0)\n+0F36A Comment Length        0000 (0)\n+0F36C Disk Start            0000 (0)\n+0F36E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F1D8 Ext File Attributes   41ED0010 (1106051088)\n+0F370 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F1DC Local Header Offset   0000048E (1166)\n-0F1E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F374 Local Header Offset   0000048E (1166)\n+0F378 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF1E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF378: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF1E0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF378: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF1B8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF350: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F219 CENTRAL HEADER #20    02014B50 (33639248)\n-0F21D Created Zip Spec      14 (20) '2.0'\n-0F21E Created OS            03 (3) 'Unix'\n-0F21F Extract Zip Spec      14 (20) '2.0'\n-0F220 Extract OS            00 (0) 'MS-DOS'\n-0F221 General Purpose Flag  0800 (2048)\n+0F3B1 CENTRAL HEADER #20    02014B50 (33639248)\n+0F3B5 Created Zip Spec      14 (20) '2.0'\n+0F3B6 Created OS            03 (3) 'Unix'\n+0F3B7 Extract Zip Spec      14 (20) '2.0'\n+0F3B8 Extract OS            00 (0) 'MS-DOS'\n+0F3B9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F223 Compression Method    0008 (8) 'Deflated'\n-0F225 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F229 CRC                   36418401 (910263297)\n-0F22D Compressed Size       00000149 (329)\n-0F231 Uncompressed Size     000003B2 (946)\n-0F235 Filename Length       0015 (21)\n-0F237 Extra Length          0000 (0)\n-0F239 Comment Length        0000 (0)\n-0F23B Disk Start            0000 (0)\n-0F23D Int File Attributes   0000 (0)\n+0F3BB Compression Method    0008 (8) 'Deflated'\n+0F3BD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F3C1 CRC                   36418401 (910263297)\n+0F3C5 Compressed Size       00000149 (329)\n+0F3C9 Uncompressed Size     000003B2 (946)\n+0F3CD Filename Length       0015 (21)\n+0F3CF Extra Length          0000 (0)\n+0F3D1 Comment Length        0000 (0)\n+0F3D3 Disk Start            0000 (0)\n+0F3D5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F23F Ext File Attributes   81A40000 (2175008768)\n+0F3D7 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F243 Local Header Offset   000004E5 (1253)\n-0F247 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+0F3DB Local Header Offset   000004E5 (1253)\n+0F3DF Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF247: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF3DF: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F25C CENTRAL HEADER #21    02014B50 (33639248)\n-0F260 Created Zip Spec      14 (20) '2.0'\n-0F261 Created OS            03 (3) 'Unix'\n-0F262 Extract Zip Spec      14 (20) '2.0'\n-0F263 Extract OS            00 (0) 'MS-DOS'\n-0F264 General Purpose Flag  0800 (2048)\n+0F3F4 CENTRAL HEADER #21    02014B50 (33639248)\n+0F3F8 Created Zip Spec      14 (20) '2.0'\n+0F3F9 Created OS            03 (3) 'Unix'\n+0F3FA Extract Zip Spec      14 (20) '2.0'\n+0F3FB Extract OS            00 (0) 'MS-DOS'\n+0F3FC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F266 Compression Method    0008 (8) 'Deflated'\n-0F268 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F26C CRC                   86E2B4B4 (2263004340)\n-0F270 Compressed Size       00000F6D (3949)\n-0F274 Uncompressed Size     00002C5E (11358)\n-0F278 Filename Length       0010 (16)\n-0F27A Extra Length          0000 (0)\n-0F27C Comment Length        0000 (0)\n-0F27E Disk Start            0000 (0)\n-0F280 Int File Attributes   0000 (0)\n+0F3FE Compression Method    0008 (8) 'Deflated'\n+0F400 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F404 CRC                   86E2B4B4 (2263004340)\n+0F408 Compressed Size       00000F6D (3949)\n+0F40C Uncompressed Size     00002C5E (11358)\n+0F410 Filename Length       0010 (16)\n+0F412 Extra Length          0000 (0)\n+0F414 Comment Length        0000 (0)\n+0F416 Disk Start            0000 (0)\n+0F418 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F282 Ext File Attributes   81A40000 (2175008768)\n+0F41A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F286 Local Header Offset   00000661 (1633)\n-0F28A Filename              'XXXXXXXXXXXXXXXX'\n+0F41E Local Header Offset   00000661 (1633)\n+0F422 Filename              'XXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF28A: Filename 'XXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF422: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F29A CENTRAL HEADER #22    02014B50 (33639248)\n-0F29E Created Zip Spec      14 (20) '2.0'\n-0F29F Created OS            03 (3) 'Unix'\n-0F2A0 Extract Zip Spec      14 (20) '2.0'\n-0F2A1 Extract OS            00 (0) 'MS-DOS'\n-0F2A2 General Purpose Flag  0800 (2048)\n+0F432 CENTRAL HEADER #22    02014B50 (33639248)\n+0F436 Created Zip Spec      14 (20) '2.0'\n+0F437 Created OS            03 (3) 'Unix'\n+0F438 Extract Zip Spec      14 (20) '2.0'\n+0F439 Extract OS            00 (0) 'MS-DOS'\n+0F43A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F2A4 Compression Method    0008 (8) 'Deflated'\n-0F2A6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F2AA CRC                   C4D5E30C (3302351628)\n-0F2AE Compressed Size       00000082 (130)\n-0F2B2 Uncompressed Size     000000B5 (181)\n-0F2B6 Filename Length       000F (15)\n-0F2B8 Extra Length          0000 (0)\n-0F2BA Comment Length        0000 (0)\n-0F2BC Disk Start            0000 (0)\n-0F2BE Int File Attributes   0000 (0)\n+0F43C Compression Method    0008 (8) 'Deflated'\n+0F43E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F442 CRC                   C4D5E30C (3302351628)\n+0F446 Compressed Size       00000082 (130)\n+0F44A Uncompressed Size     000000B5 (181)\n+0F44E Filename Length       000F (15)\n+0F450 Extra Length          0000 (0)\n+0F452 Comment Length        0000 (0)\n+0F454 Disk Start            0000 (0)\n+0F456 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F2C0 Ext File Attributes   81A40000 (2175008768)\n+0F458 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F2C4 Local Header Offset   000015FC (5628)\n-0F2C8 Filename              'XXXXXXXXXXXXXXX'\n+0F45C Local Header Offset   000015FC (5628)\n+0F460 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF2C8: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF460: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F2D7 CENTRAL HEADER #23    02014B50 (33639248)\n-0F2DB Created Zip Spec      14 (20) '2.0'\n-0F2DC Created OS            03 (3) 'Unix'\n-0F2DD Extract Zip Spec      14 (20) '2.0'\n-0F2DE Extract OS            00 (0) 'MS-DOS'\n-0F2DF General Purpose Flag  0800 (2048)\n+0F46F CENTRAL HEADER #23    02014B50 (33639248)\n+0F473 Created Zip Spec      14 (20) '2.0'\n+0F474 Created OS            03 (3) 'Unix'\n+0F475 Extract Zip Spec      14 (20) '2.0'\n+0F476 Extract OS            00 (0) 'MS-DOS'\n+0F477 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F2E1 Compression Method    0008 (8) 'Deflated'\n-0F2E3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F2E7 CRC                   CFBCCE03 (3485257219)\n-0F2EB Compressed Size       0000053F (1343)\n-0F2EF Uncompressed Size     00000F86 (3974)\n-0F2F3 Filename Length       0057 (87)\n-0F2F5 Extra Length          0000 (0)\n-0F2F7 Comment Length        0000 (0)\n-0F2F9 Disk Start            0000 (0)\n-0F2FB Int File Attributes   0000 (0)\n+0F479 Compression Method    0008 (8) 'Deflated'\n+0F47B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F47F CRC                   EDE26CAC (3991039148)\n+0F483 Compressed Size       0000054C (1356)\n+0F487 Uncompressed Size     00000FF2 (4082)\n+0F48B Filename Length       0057 (87)\n+0F48D Extra Length          0000 (0)\n+0F48F Comment Length        0000 (0)\n+0F491 Disk Start            0000 (0)\n+0F493 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F2FD Ext File Attributes   81A40000 (2175008768)\n+0F495 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F301 Local Header Offset   000016AB (5803)\n-0F305 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F499 Local Header Offset   000016AB (5803)\n+0F49D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF305: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF49D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F35C CENTRAL HEADER #24    02014B50 (33639248)\n-0F360 Created Zip Spec      14 (20) '2.0'\n-0F361 Created OS            03 (3) 'Unix'\n-0F362 Extract Zip Spec      14 (20) '2.0'\n-0F363 Extract OS            00 (0) 'MS-DOS'\n-0F364 General Purpose Flag  0800 (2048)\n+0F4F4 CENTRAL HEADER #24    02014B50 (33639248)\n+0F4F8 Created Zip Spec      14 (20) '2.0'\n+0F4F9 Created OS            03 (3) 'Unix'\n+0F4FA Extract Zip Spec      14 (20) '2.0'\n+0F4FB Extract OS            00 (0) 'MS-DOS'\n+0F4FC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F366 Compression Method    0008 (8) 'Deflated'\n-0F368 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F36C CRC                   98FA0F9F (2566524831)\n-0F370 Compressed Size       000004D5 (1237)\n-0F374 Uncompressed Size     00000E91 (3729)\n-0F378 Filename Length       004D (77)\n-0F37A Extra Length          0000 (0)\n-0F37C Comment Length        0000 (0)\n-0F37E Disk Start            0000 (0)\n-0F380 Int File Attributes   0000 (0)\n+0F4FE Compression Method    0008 (8) 'Deflated'\n+0F500 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F504 CRC                   28829ABF (679647935)\n+0F508 Compressed Size       000004E1 (1249)\n+0F50C Uncompressed Size     00000EFA (3834)\n+0F510 Filename Length       004D (77)\n+0F512 Extra Length          0000 (0)\n+0F514 Comment Length        0000 (0)\n+0F516 Disk Start            0000 (0)\n+0F518 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F382 Ext File Attributes   81A40000 (2175008768)\n+0F51A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F386 Local Header Offset   00001C5F (7263)\n-0F38A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F51E Local Header Offset   00001C6C (7276)\n+0F522 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF38A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF522: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F3D7 CENTRAL HEADER #25    02014B50 (33639248)\n-0F3DB Created Zip Spec      14 (20) '2.0'\n-0F3DC Created OS            03 (3) 'Unix'\n-0F3DD Extract Zip Spec      14 (20) '2.0'\n-0F3DE Extract OS            00 (0) 'MS-DOS'\n-0F3DF General Purpose Flag  0800 (2048)\n+0F56F CENTRAL HEADER #25    02014B50 (33639248)\n+0F573 Created Zip Spec      14 (20) '2.0'\n+0F574 Created OS            03 (3) 'Unix'\n+0F575 Extract Zip Spec      14 (20) '2.0'\n+0F576 Extract OS            00 (0) 'MS-DOS'\n+0F577 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F3E1 Compression Method    0008 (8) 'Deflated'\n-0F3E3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F3E7 CRC                   2E3E715F (775844191)\n-0F3EB Compressed Size       000003FF (1023)\n-0F3EF Uncompressed Size     000009AF (2479)\n-0F3F3 Filename Length       0061 (97)\n-0F3F5 Extra Length          0000 (0)\n-0F3F7 Comment Length        0000 (0)\n-0F3F9 Disk Start            0000 (0)\n-0F3FB Int File Attributes   0000 (0)\n+0F579 Compression Method    0008 (8) 'Deflated'\n+0F57B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F57F CRC                   E1E2CA9A (3789736602)\n+0F583 Compressed Size       00000409 (1033)\n+0F587 Uncompressed Size     000009EB (2539)\n+0F58B Filename Length       0061 (97)\n+0F58D Extra Length          0000 (0)\n+0F58F Comment Length        0000 (0)\n+0F591 Disk Start            0000 (0)\n+0F593 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F3FD Ext File Attributes   81A40000 (2175008768)\n+0F595 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F401 Local Header Offset   0000219F (8607)\n-0F405 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F599 Local Header Offset   000021B8 (8632)\n+0F59D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF405: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF59D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F466 CENTRAL HEADER #26    02014B50 (33639248)\n-0F46A Created Zip Spec      14 (20) '2.0'\n-0F46B Created OS            03 (3) 'Unix'\n-0F46C Extract Zip Spec      14 (20) '2.0'\n-0F46D Extract OS            00 (0) 'MS-DOS'\n-0F46E General Purpose Flag  0800 (2048)\n+0F5FE CENTRAL HEADER #26    02014B50 (33639248)\n+0F602 Created Zip Spec      14 (20) '2.0'\n+0F603 Created OS            03 (3) 'Unix'\n+0F604 Extract Zip Spec      14 (20) '2.0'\n+0F605 Extract OS            00 (0) 'MS-DOS'\n+0F606 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F470 Compression Method    0008 (8) 'Deflated'\n-0F472 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F476 CRC                   D9A5C573 (3651519859)\n-0F47A Compressed Size       0000033B (827)\n-0F47E Uncompressed Size     00000756 (1878)\n-0F482 Filename Length       0057 (87)\n-0F484 Extra Length          0000 (0)\n-0F486 Comment Length        0000 (0)\n-0F488 Disk Start            0000 (0)\n-0F48A Int File Attributes   0000 (0)\n+0F608 Compression Method    0008 (8) 'Deflated'\n+0F60A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F60E CRC                   31BAA9F2 (834316786)\n+0F612 Compressed Size       00000341 (833)\n+0F616 Uncompressed Size     00000788 (1928)\n+0F61A Filename Length       0057 (87)\n+0F61C Extra Length          0000 (0)\n+0F61E Comment Length        0000 (0)\n+0F620 Disk Start            0000 (0)\n+0F622 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F48C Ext File Attributes   81A40000 (2175008768)\n+0F624 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F490 Local Header Offset   0000261D (9757)\n-0F494 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F628 Local Header Offset   00002640 (9792)\n+0F62C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF494: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF62C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F4EB CENTRAL HEADER #27    02014B50 (33639248)\n-0F4EF Created Zip Spec      14 (20) '2.0'\n-0F4F0 Created OS            03 (3) 'Unix'\n-0F4F1 Extract Zip Spec      14 (20) '2.0'\n-0F4F2 Extract OS            00 (0) 'MS-DOS'\n-0F4F3 General Purpose Flag  0800 (2048)\n+0F683 CENTRAL HEADER #27    02014B50 (33639248)\n+0F687 Created Zip Spec      14 (20) '2.0'\n+0F688 Created OS            03 (3) 'Unix'\n+0F689 Extract Zip Spec      14 (20) '2.0'\n+0F68A Extract OS            00 (0) 'MS-DOS'\n+0F68B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F4F5 Compression Method    0008 (8) 'Deflated'\n-0F4F7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F4FB CRC                   A2AE804F (2729345103)\n-0F4FF Compressed Size       000003F9 (1017)\n-0F503 Uncompressed Size     000009F9 (2553)\n-0F507 Filename Length       005C (92)\n-0F509 Extra Length          0000 (0)\n-0F50B Comment Length        0000 (0)\n-0F50D Disk Start            0000 (0)\n-0F50F Int File Attributes   0000 (0)\n+0F68D Compression Method    0008 (8) 'Deflated'\n+0F68F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F693 CRC                   CA7A5ADF (3397016287)\n+0F697 Compressed Size       00000402 (1026)\n+0F69B Uncompressed Size     00000A36 (2614)\n+0F69F Filename Length       005C (92)\n+0F6A1 Extra Length          0000 (0)\n+0F6A3 Comment Length        0000 (0)\n+0F6A5 Disk Start            0000 (0)\n+0F6A7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F511 Ext File Attributes   81A40000 (2175008768)\n+0F6A9 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F515 Local Header Offset   000029CD (10701)\n-0F519 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F6AD Local Header Offset   000029F6 (10742)\n+0F6B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF519: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF6B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F575 CENTRAL HEADER #28    02014B50 (33639248)\n-0F579 Created Zip Spec      14 (20) '2.0'\n-0F57A Created OS            03 (3) 'Unix'\n-0F57B Extract Zip Spec      14 (20) '2.0'\n-0F57C Extract OS            00 (0) 'MS-DOS'\n-0F57D General Purpose Flag  0800 (2048)\n+0F70D CENTRAL HEADER #28    02014B50 (33639248)\n+0F711 Created Zip Spec      14 (20) '2.0'\n+0F712 Created OS            03 (3) 'Unix'\n+0F713 Extract Zip Spec      14 (20) '2.0'\n+0F714 Extract OS            00 (0) 'MS-DOS'\n+0F715 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F57F Compression Method    0008 (8) 'Deflated'\n-0F581 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F585 CRC                   F33EC0CF (4080976079)\n-0F589 Compressed Size       00000340 (832)\n-0F58D Uncompressed Size     0000077B (1915)\n-0F591 Filename Length       005A (90)\n-0F593 Extra Length          0000 (0)\n-0F595 Comment Length        0000 (0)\n-0F597 Disk Start            0000 (0)\n-0F599 Int File Attributes   0000 (0)\n+0F717 Compression Method    0008 (8) 'Deflated'\n+0F719 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F71D CRC                   9F81DA8D (2676087437)\n+0F721 Compressed Size       00000347 (839)\n+0F725 Uncompressed Size     000007AC (1964)\n+0F729 Filename Length       005A (90)\n+0F72B Extra Length          0000 (0)\n+0F72D Comment Length        0000 (0)\n+0F72F Disk Start            0000 (0)\n+0F731 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F59B Ext File Attributes   81A40000 (2175008768)\n+0F733 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F59F Local Header Offset   00002E40 (11840)\n-0F5A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F737 Local Header Offset   00002E72 (11890)\n+0F73B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF5A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF73B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F5FD CENTRAL HEADER #29    02014B50 (33639248)\n-0F601 Created Zip Spec      14 (20) '2.0'\n-0F602 Created OS            03 (3) 'Unix'\n-0F603 Extract Zip Spec      14 (20) '2.0'\n-0F604 Extract OS            00 (0) 'MS-DOS'\n-0F605 General Purpose Flag  0800 (2048)\n+0F795 CENTRAL HEADER #29    02014B50 (33639248)\n+0F799 Created Zip Spec      14 (20) '2.0'\n+0F79A Created OS            03 (3) 'Unix'\n+0F79B Extract Zip Spec      14 (20) '2.0'\n+0F79C Extract OS            00 (0) 'MS-DOS'\n+0F79D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F607 Compression Method    0008 (8) 'Deflated'\n-0F609 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F60D CRC                   4315772B (1125480235)\n-0F611 Compressed Size       00000367 (871)\n-0F615 Uncompressed Size     0000084D (2125)\n-0F619 Filename Length       0056 (86)\n-0F61B Extra Length          0000 (0)\n-0F61D Comment Length        0000 (0)\n-0F61F Disk Start            0000 (0)\n-0F621 Int File Attributes   0000 (0)\n+0F79F Compression Method    0008 (8) 'Deflated'\n+0F7A1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F7A5 CRC                   F865F474 (4167431284)\n+0F7A9 Compressed Size       0000036F (879)\n+0F7AD Uncompressed Size     00000884 (2180)\n+0F7B1 Filename Length       0056 (86)\n+0F7B3 Extra Length          0000 (0)\n+0F7B5 Comment Length        0000 (0)\n+0F7B7 Disk Start            0000 (0)\n+0F7B9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F623 Ext File Attributes   81A40000 (2175008768)\n+0F7BB Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F627 Local Header Offset   000031F8 (12792)\n-0F62B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F7BF Local Header Offset   00003231 (12849)\n+0F7C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF62B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF7C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F681 CENTRAL HEADER #30    02014B50 (33639248)\n-0F685 Created Zip Spec      14 (20) '2.0'\n-0F686 Created OS            03 (3) 'Unix'\n-0F687 Extract Zip Spec      14 (20) '2.0'\n-0F688 Extract OS            00 (0) 'MS-DOS'\n-0F689 General Purpose Flag  0800 (2048)\n+0F819 CENTRAL HEADER #30    02014B50 (33639248)\n+0F81D Created Zip Spec      14 (20) '2.0'\n+0F81E Created OS            03 (3) 'Unix'\n+0F81F Extract Zip Spec      14 (20) '2.0'\n+0F820 Extract OS            00 (0) 'MS-DOS'\n+0F821 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F68B Compression Method    0008 (8) 'Deflated'\n-0F68D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F691 CRC                   9303FD8F (2466512271)\n-0F695 Compressed Size       000003C9 (969)\n-0F699 Uncompressed Size     000009E5 (2533)\n-0F69D Filename Length       0059 (89)\n-0F69F Extra Length          0000 (0)\n-0F6A1 Comment Length        0000 (0)\n-0F6A3 Disk Start            0000 (0)\n-0F6A5 Int File Attributes   0000 (0)\n+0F823 Compression Method    0008 (8) 'Deflated'\n+0F825 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F829 CRC                   3B8200F2 (998375666)\n+0F82D Compressed Size       000003D1 (977)\n+0F831 Uncompressed Size     00000A26 (2598)\n+0F835 Filename Length       0059 (89)\n+0F837 Extra Length          0000 (0)\n+0F839 Comment Length        0000 (0)\n+0F83B Disk Start            0000 (0)\n+0F83D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F6A7 Ext File Attributes   81A40000 (2175008768)\n+0F83F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F6AB Local Header Offset   000035D3 (13779)\n-0F6AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F843 Local Header Offset   00003614 (13844)\n+0F847 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF6AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF847: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F708 CENTRAL HEADER #31    02014B50 (33639248)\n-0F70C Created Zip Spec      14 (20) '2.0'\n-0F70D Created OS            03 (3) 'Unix'\n-0F70E Extract Zip Spec      14 (20) '2.0'\n-0F70F Extract OS            00 (0) 'MS-DOS'\n-0F710 General Purpose Flag  0800 (2048)\n+0F8A0 CENTRAL HEADER #31    02014B50 (33639248)\n+0F8A4 Created Zip Spec      14 (20) '2.0'\n+0F8A5 Created OS            03 (3) 'Unix'\n+0F8A6 Extract Zip Spec      14 (20) '2.0'\n+0F8A7 Extract OS            00 (0) 'MS-DOS'\n+0F8A8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F712 Compression Method    0008 (8) 'Deflated'\n-0F714 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F718 CRC                   243129AC (607201708)\n-0F71C Compressed Size       000003F1 (1009)\n-0F720 Uncompressed Size     000009C2 (2498)\n-0F724 Filename Length       0055 (85)\n-0F726 Extra Length          0000 (0)\n-0F728 Comment Length        0000 (0)\n-0F72A Disk Start            0000 (0)\n-0F72C Int File Attributes   0000 (0)\n+0F8AA Compression Method    0008 (8) 'Deflated'\n+0F8AC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F8B0 CRC                   D0E79628 (3504838184)\n+0F8B4 Compressed Size       000003FC (1020)\n+0F8B8 Uncompressed Size     00000A00 (2560)\n+0F8BC Filename Length       0055 (85)\n+0F8BE Extra Length          0000 (0)\n+0F8C0 Comment Length        0000 (0)\n+0F8C2 Disk Start            0000 (0)\n+0F8C4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F72E Ext File Attributes   81A40000 (2175008768)\n+0F8C6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F732 Local Header Offset   00003A13 (14867)\n-0F736 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F8CA Local Header Offset   00003A5C (14940)\n+0F8CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF736: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF8CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F78B CENTRAL HEADER #32    02014B50 (33639248)\n-0F78F Created Zip Spec      14 (20) '2.0'\n-0F790 Created OS            03 (3) 'Unix'\n-0F791 Extract Zip Spec      14 (20) '2.0'\n-0F792 Extract OS            00 (0) 'MS-DOS'\n-0F793 General Purpose Flag  0800 (2048)\n+0F923 CENTRAL HEADER #32    02014B50 (33639248)\n+0F927 Created Zip Spec      14 (20) '2.0'\n+0F928 Created OS            03 (3) 'Unix'\n+0F929 Extract Zip Spec      14 (20) '2.0'\n+0F92A Extract OS            00 (0) 'MS-DOS'\n+0F92B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F795 Compression Method    0008 (8) 'Deflated'\n-0F797 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F79B CRC                   82B7884A (2193066058)\n-0F79F Compressed Size       00000367 (871)\n-0F7A3 Uncompressed Size     00000961 (2401)\n-0F7A7 Filename Length       0054 (84)\n-0F7A9 Extra Length          0000 (0)\n-0F7AB Comment Length        0000 (0)\n-0F7AD Disk Start            0000 (0)\n-0F7AF Int File Attributes   0000 (0)\n+0F92D Compression Method    0008 (8) 'Deflated'\n+0F92F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F933 CRC                   83EF7907 (2213509383)\n+0F937 Compressed Size       0000036C (876)\n+0F93B Uncompressed Size     00000996 (2454)\n+0F93F Filename Length       0054 (84)\n+0F941 Extra Length          0000 (0)\n+0F943 Comment Length        0000 (0)\n+0F945 Disk Start            0000 (0)\n+0F947 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F7B1 Ext File Attributes   81A40000 (2175008768)\n+0F949 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F7B5 Local Header Offset   00003E77 (15991)\n-0F7B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F94D Local Header Offset   00003ECB (16075)\n+0F951 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF7B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF951: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F80D CENTRAL HEADER #33    02014B50 (33639248)\n-0F811 Created Zip Spec      14 (20) '2.0'\n-0F812 Created OS            03 (3) 'Unix'\n-0F813 Extract Zip Spec      14 (20) '2.0'\n-0F814 Extract OS            00 (0) 'MS-DOS'\n-0F815 General Purpose Flag  0800 (2048)\n+0F9A5 CENTRAL HEADER #33    02014B50 (33639248)\n+0F9A9 Created Zip Spec      14 (20) '2.0'\n+0F9AA Created OS            03 (3) 'Unix'\n+0F9AB Extract Zip Spec      14 (20) '2.0'\n+0F9AC Extract OS            00 (0) 'MS-DOS'\n+0F9AD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F817 Compression Method    0008 (8) 'Deflated'\n-0F819 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F81D CRC                   0F671EAE (258416302)\n-0F821 Compressed Size       0000030F (783)\n-0F825 Uncompressed Size     000006DB (1755)\n-0F829 Filename Length       005B (91)\n-0F82B Extra Length          0000 (0)\n-0F82D Comment Length        0000 (0)\n-0F82F Disk Start            0000 (0)\n-0F831 Int File Attributes   0000 (0)\n+0F9AF Compression Method    0008 (8) 'Deflated'\n+0F9B1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F9B5 CRC                   DC4AAC43 (3695881283)\n+0F9B9 Compressed Size       00000319 (793)\n+0F9BD Uncompressed Size     0000070A (1802)\n+0F9C1 Filename Length       005B (91)\n+0F9C3 Extra Length          0000 (0)\n+0F9C5 Comment Length        0000 (0)\n+0F9C7 Disk Start            0000 (0)\n+0F9C9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F833 Ext File Attributes   81A40000 (2175008768)\n+0F9CB Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F837 Local Header Offset   00004250 (16976)\n-0F83B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F9CF Local Header Offset   000042A9 (17065)\n+0F9D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF83B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF9D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F896 CENTRAL HEADER #34    02014B50 (33639248)\n-0F89A Created Zip Spec      14 (20) '2.0'\n-0F89B Created OS            03 (3) 'Unix'\n-0F89C Extract Zip Spec      14 (20) '2.0'\n-0F89D Extract OS            00 (0) 'MS-DOS'\n-0F89E General Purpose Flag  0800 (2048)\n+0FA2E CENTRAL HEADER #34    02014B50 (33639248)\n+0FA32 Created Zip Spec      14 (20) '2.0'\n+0FA33 Created OS            03 (3) 'Unix'\n+0FA34 Extract Zip Spec      14 (20) '2.0'\n+0FA35 Extract OS            00 (0) 'MS-DOS'\n+0FA36 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F8A0 Compression Method    0008 (8) 'Deflated'\n-0F8A2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F8A6 CRC                   14082F15 (336080661)\n-0F8AA Compressed Size       000003BB (955)\n-0F8AE Uncompressed Size     000009D5 (2517)\n-0F8B2 Filename Length       0055 (85)\n-0F8B4 Extra Length          0000 (0)\n-0F8B6 Comment Length        0000 (0)\n-0F8B8 Disk Start            0000 (0)\n-0F8BA Int File Attributes   0000 (0)\n+0FA38 Compression Method    0008 (8) 'Deflated'\n+0FA3A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FA3E CRC                   9D1BE974 (2635852148)\n+0FA42 Compressed Size       000003C5 (965)\n+0FA46 Uncompressed Size     00000A0D (2573)\n+0FA4A Filename Length       0055 (85)\n+0FA4C Extra Length          0000 (0)\n+0FA4E Comment Length        0000 (0)\n+0FA50 Disk Start            0000 (0)\n+0FA52 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F8BC Ext File Attributes   81A40000 (2175008768)\n+0FA54 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F8C0 Local Header Offset   000045D8 (17880)\n-0F8C4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FA58 Local Header Offset   0000463B (17979)\n+0FA5C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF8C4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFA5C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F919 CENTRAL HEADER #35    02014B50 (33639248)\n-0F91D Created Zip Spec      14 (20) '2.0'\n-0F91E Created OS            03 (3) 'Unix'\n-0F91F Extract Zip Spec      14 (20) '2.0'\n-0F920 Extract OS            00 (0) 'MS-DOS'\n-0F921 General Purpose Flag  0800 (2048)\n+0FAB1 CENTRAL HEADER #35    02014B50 (33639248)\n+0FAB5 Created Zip Spec      14 (20) '2.0'\n+0FAB6 Created OS            03 (3) 'Unix'\n+0FAB7 Extract Zip Spec      14 (20) '2.0'\n+0FAB8 Extract OS            00 (0) 'MS-DOS'\n+0FAB9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F923 Compression Method    0008 (8) 'Deflated'\n-0F925 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F929 CRC                   3F334AFC (1060326140)\n-0F92D Compressed Size       00000314 (788)\n-0F931 Uncompressed Size     000006F3 (1779)\n-0F935 Filename Length       0058 (88)\n-0F937 Extra Length          0000 (0)\n-0F939 Comment Length        0000 (0)\n-0F93B Disk Start            0000 (0)\n-0F93D Int File Attributes   0000 (0)\n+0FABB Compression Method    0008 (8) 'Deflated'\n+0FABD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FAC1 CRC                   F3B9E657 (4089046615)\n+0FAC5 Compressed Size       0000031D (797)\n+0FAC9 Uncompressed Size     00000724 (1828)\n+0FACD Filename Length       0058 (88)\n+0FACF Extra Length          0000 (0)\n+0FAD1 Comment Length        0000 (0)\n+0FAD3 Disk Start            0000 (0)\n+0FAD5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F93F Ext File Attributes   81A40000 (2175008768)\n+0FAD7 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F943 Local Header Offset   00004A06 (18950)\n-0F947 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FADB Local Header Offset   00004A73 (19059)\n+0FADF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF947: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFADF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F99F CENTRAL HEADER #36    02014B50 (33639248)\n-0F9A3 Created Zip Spec      14 (20) '2.0'\n-0F9A4 Created OS            03 (3) 'Unix'\n-0F9A5 Extract Zip Spec      14 (20) '2.0'\n-0F9A6 Extract OS            00 (0) 'MS-DOS'\n-0F9A7 General Purpose Flag  0800 (2048)\n+0FB37 CENTRAL HEADER #36    02014B50 (33639248)\n+0FB3B Created Zip Spec      14 (20) '2.0'\n+0FB3C Created OS            03 (3) 'Unix'\n+0FB3D Extract Zip Spec      14 (20) '2.0'\n+0FB3E Extract OS            00 (0) 'MS-DOS'\n+0FB3F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F9A9 Compression Method    0008 (8) 'Deflated'\n-0F9AB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F9AF CRC                   D56FC3BA (3580871610)\n-0F9B3 Compressed Size       000004BD (1213)\n-0F9B7 Uncompressed Size     00000EFC (3836)\n-0F9BB Filename Length       0052 (82)\n-0F9BD Extra Length          0000 (0)\n-0F9BF Comment Length        0000 (0)\n-0F9C1 Disk Start            0000 (0)\n-0F9C3 Int File Attributes   0000 (0)\n+0FB41 Compression Method    0008 (8) 'Deflated'\n+0FB43 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FB47 CRC                   5F1744C1 (1595360449)\n+0FB4B Compressed Size       000004C9 (1225)\n+0FB4F Uncompressed Size     00000F5C (3932)\n+0FB53 Filename Length       0052 (82)\n+0FB55 Extra Length          0000 (0)\n+0FB57 Comment Length        0000 (0)\n+0FB59 Disk Start            0000 (0)\n+0FB5B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F9C5 Ext File Attributes   81A40000 (2175008768)\n+0FB5D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F9C9 Local Header Offset   00004D90 (19856)\n-0F9CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FB61 Local Header Offset   00004E06 (19974)\n+0FB65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF9CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFB65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FA1F CENTRAL HEADER #37    02014B50 (33639248)\n-0FA23 Created Zip Spec      14 (20) '2.0'\n-0FA24 Created OS            03 (3) 'Unix'\n-0FA25 Extract Zip Spec      14 (20) '2.0'\n-0FA26 Extract OS            00 (0) 'MS-DOS'\n-0FA27 General Purpose Flag  0800 (2048)\n+0FBB7 CENTRAL HEADER #37    02014B50 (33639248)\n+0FBBB Created Zip Spec      14 (20) '2.0'\n+0FBBC Created OS            03 (3) 'Unix'\n+0FBBD Extract Zip Spec      14 (20) '2.0'\n+0FBBE Extract OS            00 (0) 'MS-DOS'\n+0FBBF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FA29 Compression Method    0008 (8) 'Deflated'\n-0FA2B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FA2F CRC                   C0B7814F (3233251663)\n-0FA33 Compressed Size       0000036C (876)\n-0FA37 Uncompressed Size     00000A17 (2583)\n-0FA3B Filename Length       0063 (99)\n-0FA3D Extra Length          0000 (0)\n-0FA3F Comment Length        0000 (0)\n-0FA41 Disk Start            0000 (0)\n-0FA43 Int File Attributes   0000 (0)\n+0FBC1 Compression Method    0008 (8) 'Deflated'\n+0FBC3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FBC7 CRC                   88B249EC (2293385708)\n+0FBCB Compressed Size       00000375 (885)\n+0FBCF Uncompressed Size     00000A4B (2635)\n+0FBD3 Filename Length       0063 (99)\n+0FBD5 Extra Length          0000 (0)\n+0FBD7 Comment Length        0000 (0)\n+0FBD9 Disk Start            0000 (0)\n+0FBDB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FA45 Ext File Attributes   81A40000 (2175008768)\n+0FBDD Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FA49 Local Header Offset   000052BD (21181)\n-0FA4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FBE1 Local Header Offset   0000533F (21311)\n+0FBE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFA4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFBE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FAB0 CENTRAL HEADER #38    02014B50 (33639248)\n-0FAB4 Created Zip Spec      14 (20) '2.0'\n-0FAB5 Created OS            03 (3) 'Unix'\n-0FAB6 Extract Zip Spec      14 (20) '2.0'\n-0FAB7 Extract OS            00 (0) 'MS-DOS'\n-0FAB8 General Purpose Flag  0800 (2048)\n+0FC48 CENTRAL HEADER #38    02014B50 (33639248)\n+0FC4C Created Zip Spec      14 (20) '2.0'\n+0FC4D Created OS            03 (3) 'Unix'\n+0FC4E Extract Zip Spec      14 (20) '2.0'\n+0FC4F Extract OS            00 (0) 'MS-DOS'\n+0FC50 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FABA Compression Method    0008 (8) 'Deflated'\n-0FABC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FAC0 CRC                   E5A77ED4 (3852959444)\n-0FAC4 Compressed Size       00000B9F (2975)\n-0FAC8 Uncompressed Size     0000353F (13631)\n-0FACC Filename Length       005D (93)\n-0FACE Extra Length          0000 (0)\n-0FAD0 Comment Length        0000 (0)\n-0FAD2 Disk Start            0000 (0)\n-0FAD4 Int File Attributes   0000 (0)\n+0FC52 Compression Method    0008 (8) 'Deflated'\n+0FC54 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FC58 CRC                   3BC8480C (1002981388)\n+0FC5C Compressed Size       00000BB1 (2993)\n+0FC60 Uncompressed Size     00003662 (13922)\n+0FC64 Filename Length       005D (93)\n+0FC66 Extra Length          0000 (0)\n+0FC68 Comment Length        0000 (0)\n+0FC6A Disk Start            0000 (0)\n+0FC6C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FAD6 Ext File Attributes   81A40000 (2175008768)\n+0FC6E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FADA Local Header Offset   000056AA (22186)\n-0FADE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FC72 Local Header Offset   00005735 (22325)\n+0FC76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFADE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFC76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FB3B CENTRAL HEADER #39    02014B50 (33639248)\n-0FB3F Created Zip Spec      14 (20) '2.0'\n-0FB40 Created OS            03 (3) 'Unix'\n-0FB41 Extract Zip Spec      14 (20) '2.0'\n-0FB42 Extract OS            00 (0) 'MS-DOS'\n-0FB43 General Purpose Flag  0800 (2048)\n+0FCD3 CENTRAL HEADER #39    02014B50 (33639248)\n+0FCD7 Created Zip Spec      14 (20) '2.0'\n+0FCD8 Created OS            03 (3) 'Unix'\n+0FCD9 Extract Zip Spec      14 (20) '2.0'\n+0FCDA Extract OS            00 (0) 'MS-DOS'\n+0FCDB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FB45 Compression Method    0008 (8) 'Deflated'\n-0FB47 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FB4B CRC                   E9A44E2B (3919859243)\n-0FB4F Compressed Size       000003DA (986)\n-0FB53 Uncompressed Size     0000098B (2443)\n-0FB57 Filename Length       005B (91)\n-0FB59 Extra Length          0000 (0)\n-0FB5B Comment Length        0000 (0)\n-0FB5D Disk Start            0000 (0)\n-0FB5F Int File Attributes   0000 (0)\n+0FCDD Compression Method    0008 (8) 'Deflated'\n+0FCDF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FCE3 CRC                   EDDF253D (3990824253)\n+0FCE7 Compressed Size       000003E7 (999)\n+0FCEB Uncompressed Size     000009CB (2507)\n+0FCEF Filename Length       005B (91)\n+0FCF1 Extra Length          0000 (0)\n+0FCF3 Comment Length        0000 (0)\n+0FCF5 Disk Start            0000 (0)\n+0FCF7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FB61 Ext File Attributes   81A40000 (2175008768)\n+0FCF9 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FB65 Local Header Offset   000062C4 (25284)\n-0FB69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FCFD Local Header Offset   00006361 (25441)\n+0FD01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFB69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFD01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FBC4 CENTRAL HEADER #40    02014B50 (33639248)\n-0FBC8 Created Zip Spec      14 (20) '2.0'\n-0FBC9 Created OS            03 (3) 'Unix'\n-0FBCA Extract Zip Spec      14 (20) '2.0'\n-0FBCB Extract OS            00 (0) 'MS-DOS'\n-0FBCC General Purpose Flag  0800 (2048)\n+0FD5C CENTRAL HEADER #40    02014B50 (33639248)\n+0FD60 Created Zip Spec      14 (20) '2.0'\n+0FD61 Created OS            03 (3) 'Unix'\n+0FD62 Extract Zip Spec      14 (20) '2.0'\n+0FD63 Extract OS            00 (0) 'MS-DOS'\n+0FD64 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FBCE Compression Method    0008 (8) 'Deflated'\n-0FBD0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FBD4 CRC                   55F65FD4 (1442209748)\n-0FBD8 Compressed Size       000008C4 (2244)\n-0FBDC Uncompressed Size     00001F3F (7999)\n-0FBE0 Filename Length       005C (92)\n-0FBE2 Extra Length          0000 (0)\n-0FBE4 Comment Length        0000 (0)\n-0FBE6 Disk Start            0000 (0)\n-0FBE8 Int File Attributes   0000 (0)\n+0FD66 Compression Method    0008 (8) 'Deflated'\n+0FD68 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FD6C CRC                   F9C2E219 (4190298649)\n+0FD70 Compressed Size       000008D0 (2256)\n+0FD74 Uncompressed Size     00001FF9 (8185)\n+0FD78 Filename Length       005C (92)\n+0FD7A Extra Length          0000 (0)\n+0FD7C Comment Length        0000 (0)\n+0FD7E Disk Start            0000 (0)\n+0FD80 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FBEA Ext File Attributes   81A40000 (2175008768)\n+0FD82 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FBEE Local Header Offset   00006717 (26391)\n-0FBF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FD86 Local Header Offset   000067C1 (26561)\n+0FD8A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFBF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFD8A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FC4E CENTRAL HEADER #41    02014B50 (33639248)\n-0FC52 Created Zip Spec      14 (20) '2.0'\n-0FC53 Created OS            03 (3) 'Unix'\n-0FC54 Extract Zip Spec      14 (20) '2.0'\n-0FC55 Extract OS            00 (0) 'MS-DOS'\n-0FC56 General Purpose Flag  0800 (2048)\n+0FDE6 CENTRAL HEADER #41    02014B50 (33639248)\n+0FDEA Created Zip Spec      14 (20) '2.0'\n+0FDEB Created OS            03 (3) 'Unix'\n+0FDEC Extract Zip Spec      14 (20) '2.0'\n+0FDED Extract OS            00 (0) 'MS-DOS'\n+0FDEE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FC58 Compression Method    0008 (8) 'Deflated'\n-0FC5A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FC5E CRC                   08A2B33B (144880443)\n-0FC62 Compressed Size       000004ED (1261)\n-0FC66 Uncompressed Size     00000E4E (3662)\n-0FC6A Filename Length       0060 (96)\n-0FC6C Extra Length          0000 (0)\n-0FC6E Comment Length        0000 (0)\n-0FC70 Disk Start            0000 (0)\n-0FC72 Int File Attributes   0000 (0)\n+0FDF0 Compression Method    0008 (8) 'Deflated'\n+0FDF2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FDF6 CRC                   6F538150 (1867743568)\n+0FDFA Compressed Size       000004FA (1274)\n+0FDFE Uncompressed Size     00000EA4 (3748)\n+0FE02 Filename Length       0060 (96)\n+0FE04 Extra Length          0000 (0)\n+0FE06 Comment Length        0000 (0)\n+0FE08 Disk Start            0000 (0)\n+0FE0A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FC74 Ext File Attributes   81A40000 (2175008768)\n+0FE0C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FC78 Local Header Offset   00007055 (28757)\n-0FC7C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FE10 Local Header Offset   0000710B (28939)\n+0FE14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFC7C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFE14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FCDC CENTRAL HEADER #42    02014B50 (33639248)\n-0FCE0 Created Zip Spec      14 (20) '2.0'\n-0FCE1 Created OS            03 (3) 'Unix'\n-0FCE2 Extract Zip Spec      14 (20) '2.0'\n-0FCE3 Extract OS            00 (0) 'MS-DOS'\n-0FCE4 General Purpose Flag  0800 (2048)\n+0FE74 CENTRAL HEADER #42    02014B50 (33639248)\n+0FE78 Created Zip Spec      14 (20) '2.0'\n+0FE79 Created OS            03 (3) 'Unix'\n+0FE7A Extract Zip Spec      14 (20) '2.0'\n+0FE7B Extract OS            00 (0) 'MS-DOS'\n+0FE7C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FCE6 Compression Method    0008 (8) 'Deflated'\n-0FCE8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FCEC CRC                   6E775F76 (1853316982)\n-0FCF0 Compressed Size       00000372 (882)\n-0FCF4 Uncompressed Size     000008A2 (2210)\n-0FCF8 Filename Length       0055 (85)\n-0FCFA Extra Length          0000 (0)\n-0FCFC Comment Length        0000 (0)\n-0FCFE Disk Start            0000 (0)\n-0FD00 Int File Attributes   0000 (0)\n+0FE7E Compression Method    0008 (8) 'Deflated'\n+0FE80 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FE84 CRC                   D6C4744E (3603199054)\n+0FE88 Compressed Size       00000378 (888)\n+0FE8C Uncompressed Size     000008D9 (2265)\n+0FE90 Filename Length       0055 (85)\n+0FE92 Extra Length          0000 (0)\n+0FE94 Comment Length        0000 (0)\n+0FE96 Disk Start            0000 (0)\n+0FE98 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FD02 Ext File Attributes   81A40000 (2175008768)\n+0FE9A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FD06 Local Header Offset   000075C0 (30144)\n-0FD0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FE9E Local Header Offset   00007683 (30339)\n+0FEA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFD0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFEA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FD5F CENTRAL HEADER #43    02014B50 (33639248)\n-0FD63 Created Zip Spec      14 (20) '2.0'\n-0FD64 Created OS            03 (3) 'Unix'\n-0FD65 Extract Zip Spec      14 (20) '2.0'\n-0FD66 Extract OS            00 (0) 'MS-DOS'\n-0FD67 General Purpose Flag  0800 (2048)\n+0FEF7 CENTRAL HEADER #43    02014B50 (33639248)\n+0FEFB Created Zip Spec      14 (20) '2.0'\n+0FEFC Created OS            03 (3) 'Unix'\n+0FEFD Extract Zip Spec      14 (20) '2.0'\n+0FEFE Extract OS            00 (0) 'MS-DOS'\n+0FEFF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FD69 Compression Method    0008 (8) 'Deflated'\n-0FD6B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FD6F CRC                   AD40460E (2906670606)\n-0FD73 Compressed Size       000003C7 (967)\n-0FD77 Uncompressed Size     00000986 (2438)\n-0FD7B Filename Length       0054 (84)\n-0FD7D Extra Length          0000 (0)\n-0FD7F Comment Length        0000 (0)\n-0FD81 Disk Start            0000 (0)\n-0FD83 Int File Attributes   0000 (0)\n+0FF01 Compression Method    0008 (8) 'Deflated'\n+0FF03 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FF07 CRC                   D59F389F (3583981727)\n+0FF0B Compressed Size       000003D1 (977)\n+0FF0F Uncompressed Size     000009C3 (2499)\n+0FF13 Filename Length       0054 (84)\n+0FF15 Extra Length          0000 (0)\n+0FF17 Comment Length        0000 (0)\n+0FF19 Disk Start            0000 (0)\n+0FF1B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FD85 Ext File Attributes   81A40000 (2175008768)\n+0FF1D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FD89 Local Header Offset   000079A5 (31141)\n-0FD8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FF21 Local Header Offset   00007A6E (31342)\n+0FF25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFD8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFF25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FDE1 CENTRAL HEADER #44    02014B50 (33639248)\n-0FDE5 Created Zip Spec      14 (20) '2.0'\n-0FDE6 Created OS            03 (3) 'Unix'\n-0FDE7 Extract Zip Spec      14 (20) '2.0'\n-0FDE8 Extract OS            00 (0) 'MS-DOS'\n-0FDE9 General Purpose Flag  0800 (2048)\n+0FF79 CENTRAL HEADER #44    02014B50 (33639248)\n+0FF7D Created Zip Spec      14 (20) '2.0'\n+0FF7E Created OS            03 (3) 'Unix'\n+0FF7F Extract Zip Spec      14 (20) '2.0'\n+0FF80 Extract OS            00 (0) 'MS-DOS'\n+0FF81 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FDEB Compression Method    0008 (8) 'Deflated'\n-0FDED Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FDF1 CRC                   C7D687E1 (3352725473)\n-0FDF5 Compressed Size       00000474 (1140)\n-0FDF9 Uncompressed Size     00000BD6 (3030)\n-0FDFD Filename Length       005E (94)\n-0FDFF Extra Length          0000 (0)\n-0FE01 Comment Length        0000 (0)\n-0FE03 Disk Start            0000 (0)\n-0FE05 Int File Attributes   0000 (0)\n+0FF83 Compression Method    0008 (8) 'Deflated'\n+0FF85 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FF89 CRC                   6B2F7A85 (1798273669)\n+0FF8D Compressed Size       00000482 (1154)\n+0FF91 Uncompressed Size     00000C21 (3105)\n+0FF95 Filename Length       005E (94)\n+0FF97 Extra Length          0000 (0)\n+0FF99 Comment Length        0000 (0)\n+0FF9B Disk Start            0000 (0)\n+0FF9D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FE07 Ext File Attributes   81A40000 (2175008768)\n+0FF9F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FE0B Local Header Offset   00007DDE (32222)\n-0FE0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FFA3 Local Header Offset   00007EB1 (32433)\n+0FFA7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFE0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFFA7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FE6D CENTRAL HEADER #45    02014B50 (33639248)\n-0FE71 Created Zip Spec      14 (20) '2.0'\n-0FE72 Created OS            03 (3) 'Unix'\n-0FE73 Extract Zip Spec      14 (20) '2.0'\n-0FE74 Extract OS            00 (0) 'MS-DOS'\n-0FE75 General Purpose Flag  0800 (2048)\n+10005 CENTRAL HEADER #45    02014B50 (33639248)\n+10009 Created Zip Spec      14 (20) '2.0'\n+1000A Created OS            03 (3) 'Unix'\n+1000B Extract Zip Spec      14 (20) '2.0'\n+1000C Extract OS            00 (0) 'MS-DOS'\n+1000D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FE77 Compression Method    0008 (8) 'Deflated'\n-0FE79 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FE7D CRC                   34169900 (873896192)\n-0FE81 Compressed Size       000002C2 (706)\n-0FE85 Uncompressed Size     0000056C (1388)\n-0FE89 Filename Length       005B (91)\n-0FE8B Extra Length          0000 (0)\n-0FE8D Comment Length        0000 (0)\n-0FE8F Disk Start            0000 (0)\n-0FE91 Int File Attributes   0000 (0)\n+1000F Compression Method    0008 (8) 'Deflated'\n+10011 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10015 CRC                   B2CF52EA (2999931626)\n+10019 Compressed Size       000002CA (714)\n+1001D Uncompressed Size     0000058E (1422)\n+10021 Filename Length       005B (91)\n+10023 Extra Length          0000 (0)\n+10025 Comment Length        0000 (0)\n+10027 Disk Start            0000 (0)\n+10029 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FE93 Ext File Attributes   81A40000 (2175008768)\n+1002B Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FE97 Local Header Offset   000082CE (33486)\n-0FE9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1002F Local Header Offset   000083AF (33711)\n+10033 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFE9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10033: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FEF6 CENTRAL HEADER #46    02014B50 (33639248)\n-0FEFA Created Zip Spec      14 (20) '2.0'\n-0FEFB Created OS            03 (3) 'Unix'\n-0FEFC Extract Zip Spec      14 (20) '2.0'\n-0FEFD Extract OS            00 (0) 'MS-DOS'\n-0FEFE General Purpose Flag  0800 (2048)\n+1008E CENTRAL HEADER #46    02014B50 (33639248)\n+10092 Created Zip Spec      14 (20) '2.0'\n+10093 Created OS            03 (3) 'Unix'\n+10094 Extract Zip Spec      14 (20) '2.0'\n+10095 Extract OS            00 (0) 'MS-DOS'\n+10096 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FF00 Compression Method    0008 (8) 'Deflated'\n-0FF02 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FF06 CRC                   6C26EEDA (1814490842)\n-0FF0A Compressed Size       000003A8 (936)\n-0FF0E Uncompressed Size     0000094C (2380)\n-0FF12 Filename Length       005D (93)\n-0FF14 Extra Length          0000 (0)\n-0FF16 Comment Length        0000 (0)\n-0FF18 Disk Start            0000 (0)\n-0FF1A Int File Attributes   0000 (0)\n+10098 Compression Method    0008 (8) 'Deflated'\n+1009A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1009E CRC                   4E4D89CC (1313704396)\n+100A2 Compressed Size       000003B2 (946)\n+100A6 Uncompressed Size     0000097F (2431)\n+100AA Filename Length       005D (93)\n+100AC Extra Length          0000 (0)\n+100AE Comment Length        0000 (0)\n+100B0 Disk Start            0000 (0)\n+100B2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FF1C Ext File Attributes   81A40000 (2175008768)\n+100B4 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FF20 Local Header Offset   00008609 (34313)\n-0FF24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+100B8 Local Header Offset   000086F2 (34546)\n+100BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFF24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x100BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FF81 CENTRAL HEADER #47    02014B50 (33639248)\n-0FF85 Created Zip Spec      14 (20) '2.0'\n-0FF86 Created OS            03 (3) 'Unix'\n-0FF87 Extract Zip Spec      14 (20) '2.0'\n-0FF88 Extract OS            00 (0) 'MS-DOS'\n-0FF89 General Purpose Flag  0800 (2048)\n+10119 CENTRAL HEADER #47    02014B50 (33639248)\n+1011D Created Zip Spec      14 (20) '2.0'\n+1011E Created OS            03 (3) 'Unix'\n+1011F Extract Zip Spec      14 (20) '2.0'\n+10120 Extract OS            00 (0) 'MS-DOS'\n+10121 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FF8B Compression Method    0008 (8) 'Deflated'\n-0FF8D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FF91 CRC                   3E0DDE77 (1041096311)\n-0FF95 Compressed Size       00000508 (1288)\n-0FF99 Uncompressed Size     0000146E (5230)\n-0FF9D Filename Length       0060 (96)\n-0FF9F Extra Length          0000 (0)\n-0FFA1 Comment Length        0000 (0)\n-0FFA3 Disk Start            0000 (0)\n-0FFA5 Int File Attributes   0000 (0)\n+10123 Compression Method    0008 (8) 'Deflated'\n+10125 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10129 CRC                   DD72B025 (3715280933)\n+1012D Compressed Size       00000513 (1299)\n+10131 Uncompressed Size     000014DA (5338)\n+10135 Filename Length       0060 (96)\n+10137 Extra Length          0000 (0)\n+10139 Comment Length        0000 (0)\n+1013B Disk Start            0000 (0)\n+1013D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FFA7 Ext File Attributes   81A40000 (2175008768)\n+1013F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FFAB Local Header Offset   00008A2C (35372)\n-0FFAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10143 Local Header Offset   00008B1F (35615)\n+10147 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFFAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10147: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1000F CENTRAL HEADER #48    02014B50 (33639248)\n-10013 Created Zip Spec      14 (20) '2.0'\n-10014 Created OS            03 (3) 'Unix'\n-10015 Extract Zip Spec      14 (20) '2.0'\n-10016 Extract OS            00 (0) 'MS-DOS'\n-10017 General Purpose Flag  0800 (2048)\n+101A7 CENTRAL HEADER #48    02014B50 (33639248)\n+101AB Created Zip Spec      14 (20) '2.0'\n+101AC Created OS            03 (3) 'Unix'\n+101AD Extract Zip Spec      14 (20) '2.0'\n+101AE Extract OS            00 (0) 'MS-DOS'\n+101AF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10019 Compression Method    0008 (8) 'Deflated'\n-1001B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1001F CRC                   FFC4205D (4291043421)\n-10023 Compressed Size       000002C5 (709)\n-10027 Uncompressed Size     00000574 (1396)\n-1002B Filename Length       005D (93)\n-1002D Extra Length          0000 (0)\n-1002F Comment Length        0000 (0)\n-10031 Disk Start            0000 (0)\n-10033 Int File Attributes   0000 (0)\n+101B1 Compression Method    0008 (8) 'Deflated'\n+101B3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+101B7 CRC                   7B71E274 (2071061108)\n+101BB Compressed Size       000002CC (716)\n+101BF Uncompressed Size     00000596 (1430)\n+101C3 Filename Length       005D (93)\n+101C5 Extra Length          0000 (0)\n+101C7 Comment Length        0000 (0)\n+101C9 Disk Start            0000 (0)\n+101CB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10035 Ext File Attributes   81A40000 (2175008768)\n+101CD Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10039 Local Header Offset   00008FB2 (36786)\n-1003D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+101D1 Local Header Offset   000090B0 (37040)\n+101D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1003D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x101D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1009A CENTRAL HEADER #49    02014B50 (33639248)\n-1009E Created Zip Spec      14 (20) '2.0'\n-1009F Created OS            03 (3) 'Unix'\n-100A0 Extract Zip Spec      14 (20) '2.0'\n-100A1 Extract OS            00 (0) 'MS-DOS'\n-100A2 General Purpose Flag  0800 (2048)\n+10232 CENTRAL HEADER #49    02014B50 (33639248)\n+10236 Created Zip Spec      14 (20) '2.0'\n+10237 Created OS            03 (3) 'Unix'\n+10238 Extract Zip Spec      14 (20) '2.0'\n+10239 Extract OS            00 (0) 'MS-DOS'\n+1023A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-100A4 Compression Method    0008 (8) 'Deflated'\n-100A6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-100AA CRC                   4DBBA4A0 (1304143008)\n-100AE Compressed Size       00000316 (790)\n-100B2 Uncompressed Size     00000779 (1913)\n-100B6 Filename Length       0061 (97)\n-100B8 Extra Length          0000 (0)\n-100BA Comment Length        0000 (0)\n-100BC Disk Start            0000 (0)\n-100BE Int File Attributes   0000 (0)\n+1023C Compression Method    0008 (8) 'Deflated'\n+1023E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10242 CRC                   2A9B2D50 (714812752)\n+10246 Compressed Size       00000320 (800)\n+1024A Uncompressed Size     0000079F (1951)\n+1024E Filename Length       0061 (97)\n+10250 Extra Length          0000 (0)\n+10252 Comment Length        0000 (0)\n+10254 Disk Start            0000 (0)\n+10256 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-100C0 Ext File Attributes   81A40000 (2175008768)\n+10258 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-100C4 Local Header Offset   000092F2 (37618)\n-100C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1025C Local Header Offset   000093F7 (37879)\n+10260 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x100C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10260: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10129 CENTRAL HEADER #50    02014B50 (33639248)\n-1012D Created Zip Spec      14 (20) '2.0'\n-1012E Created OS            03 (3) 'Unix'\n-1012F Extract Zip Spec      14 (20) '2.0'\n-10130 Extract OS            00 (0) 'MS-DOS'\n-10131 General Purpose Flag  0800 (2048)\n+102C1 CENTRAL HEADER #50    02014B50 (33639248)\n+102C5 Created Zip Spec      14 (20) '2.0'\n+102C6 Created OS            03 (3) 'Unix'\n+102C7 Extract Zip Spec      14 (20) '2.0'\n+102C8 Extract OS            00 (0) 'MS-DOS'\n+102C9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10133 Compression Method    0008 (8) 'Deflated'\n-10135 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10139 CRC                   DB349372 (3677655922)\n-1013D Compressed Size       000002C5 (709)\n-10141 Uncompressed Size     00000570 (1392)\n-10145 Filename Length       005C (92)\n-10147 Extra Length          0000 (0)\n-10149 Comment Length        0000 (0)\n-1014B Disk Start            0000 (0)\n-1014D Int File Attributes   0000 (0)\n+102CB Compression Method    0008 (8) 'Deflated'\n+102CD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+102D1 CRC                   7EE5B353 (2128982867)\n+102D5 Compressed Size       000002CC (716)\n+102D9 Uncompressed Size     00000592 (1426)\n+102DD Filename Length       005C (92)\n+102DF Extra Length          0000 (0)\n+102E1 Comment Length        0000 (0)\n+102E3 Disk Start            0000 (0)\n+102E5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1014F Ext File Attributes   81A40000 (2175008768)\n+102E7 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10153 Local Header Offset   00009687 (38535)\n-10157 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+102EB Local Header Offset   00009796 (38806)\n+102EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10157: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x102EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-101B3 CENTRAL HEADER #51    02014B50 (33639248)\n-101B7 Created Zip Spec      14 (20) '2.0'\n-101B8 Created OS            03 (3) 'Unix'\n-101B9 Extract Zip Spec      14 (20) '2.0'\n-101BA Extract OS            00 (0) 'MS-DOS'\n-101BB General Purpose Flag  0800 (2048)\n+1034B CENTRAL HEADER #51    02014B50 (33639248)\n+1034F Created Zip Spec      14 (20) '2.0'\n+10350 Created OS            03 (3) 'Unix'\n+10351 Extract Zip Spec      14 (20) '2.0'\n+10352 Extract OS            00 (0) 'MS-DOS'\n+10353 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-101BD Compression Method    0008 (8) 'Deflated'\n-101BF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-101C3 CRC                   8BDD0458 (2346517592)\n-101C7 Compressed Size       00000402 (1026)\n-101CB Uncompressed Size     00000B9F (2975)\n-101CF Filename Length       006F (111)\n-101D1 Extra Length          0000 (0)\n-101D3 Comment Length        0000 (0)\n-101D5 Disk Start            0000 (0)\n-101D7 Int File Attributes   0000 (0)\n+10355 Compression Method    0008 (8) 'Deflated'\n+10357 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1035B CRC                   6B98A176 (1805164918)\n+1035F Compressed Size       0000040A (1034)\n+10363 Uncompressed Size     00000BE4 (3044)\n+10367 Filename Length       006F (111)\n+10369 Extra Length          0000 (0)\n+1036B Comment Length        0000 (0)\n+1036D Disk Start            0000 (0)\n+1036F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-101D9 Ext File Attributes   81A40000 (2175008768)\n+10371 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-101DD Local Header Offset   000099C6 (39366)\n-101E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10375 Local Header Offset   00009ADC (39644)\n+10379 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x101E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10379: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10250 CENTRAL HEADER #52    02014B50 (33639248)\n-10254 Created Zip Spec      14 (20) '2.0'\n-10255 Created OS            03 (3) 'Unix'\n-10256 Extract Zip Spec      14 (20) '2.0'\n-10257 Extract OS            00 (0) 'MS-DOS'\n-10258 General Purpose Flag  0800 (2048)\n+103E8 CENTRAL HEADER #52    02014B50 (33639248)\n+103EC Created Zip Spec      14 (20) '2.0'\n+103ED Created OS            03 (3) 'Unix'\n+103EE Extract Zip Spec      14 (20) '2.0'\n+103EF Extract OS            00 (0) 'MS-DOS'\n+103F0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1025A Compression Method    0008 (8) 'Deflated'\n-1025C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10260 CRC                   B306B850 (3003562064)\n-10264 Compressed Size       0000035C (860)\n-10268 Uncompressed Size     0000077D (1917)\n-1026C Filename Length       0063 (99)\n-1026E Extra Length          0000 (0)\n-10270 Comment Length        0000 (0)\n-10272 Disk Start            0000 (0)\n-10274 Int File Attributes   0000 (0)\n+103F2 Compression Method    0008 (8) 'Deflated'\n+103F4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+103F8 CRC                   3BA0FDB6 (1000406454)\n+103FC Compressed Size       00000363 (867)\n+10400 Uncompressed Size     000007A8 (1960)\n+10404 Filename Length       0063 (99)\n+10406 Extra Length          0000 (0)\n+10408 Comment Length        0000 (0)\n+1040A Disk Start            0000 (0)\n+1040C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10276 Ext File Attributes   81A40000 (2175008768)\n+1040E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1027A Local Header Offset   00009E55 (40533)\n-1027E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10412 Local Header Offset   00009F73 (40819)\n+10416 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1027E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10416: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-102E1 CENTRAL HEADER #53    02014B50 (33639248)\n-102E5 Created Zip Spec      14 (20) '2.0'\n-102E6 Created OS            03 (3) 'Unix'\n-102E7 Extract Zip Spec      14 (20) '2.0'\n-102E8 Extract OS            00 (0) 'MS-DOS'\n-102E9 General Purpose Flag  0800 (2048)\n+10479 CENTRAL HEADER #53    02014B50 (33639248)\n+1047D Created Zip Spec      14 (20) '2.0'\n+1047E Created OS            03 (3) 'Unix'\n+1047F Extract Zip Spec      14 (20) '2.0'\n+10480 Extract OS            00 (0) 'MS-DOS'\n+10481 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-102EB Compression Method    0008 (8) 'Deflated'\n-102ED Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-102F1 CRC                   CD8B5D37 (3448462647)\n-102F5 Compressed Size       0000035A (858)\n-102F9 Uncompressed Size     000007AD (1965)\n-102FD Filename Length       0062 (98)\n-102FF Extra Length          0000 (0)\n-10301 Comment Length        0000 (0)\n-10303 Disk Start            0000 (0)\n-10305 Int File Attributes   0000 (0)\n+10483 Compression Method    0008 (8) 'Deflated'\n+10485 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10489 CRC                   AE7D7C02 (2927459330)\n+1048D Compressed Size       00000362 (866)\n+10491 Uncompressed Size     000007D9 (2009)\n+10495 Filename Length       0062 (98)\n+10497 Extra Length          0000 (0)\n+10499 Comment Length        0000 (0)\n+1049B Disk Start            0000 (0)\n+1049D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10307 Ext File Attributes   81A40000 (2175008768)\n+1049F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1030B Local Header Offset   0000A232 (41522)\n-1030F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+104A3 Local Header Offset   0000A357 (41815)\n+104A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1030F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x104A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10371 CENTRAL HEADER #54    02014B50 (33639248)\n-10375 Created Zip Spec      14 (20) '2.0'\n-10376 Created OS            03 (3) 'Unix'\n-10377 Extract Zip Spec      14 (20) '2.0'\n-10378 Extract OS            00 (0) 'MS-DOS'\n-10379 General Purpose Flag  0800 (2048)\n+10509 CENTRAL HEADER #54    02014B50 (33639248)\n+1050D Created Zip Spec      14 (20) '2.0'\n+1050E Created OS            03 (3) 'Unix'\n+1050F Extract Zip Spec      14 (20) '2.0'\n+10510 Extract OS            00 (0) 'MS-DOS'\n+10511 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1037B Compression Method    0008 (8) 'Deflated'\n-1037D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10381 CRC                   95BEC86B (2512308331)\n-10385 Compressed Size       000006D4 (1748)\n-10389 Uncompressed Size     00001B8D (7053)\n-1038D Filename Length       0068 (104)\n-1038F Extra Length          0000 (0)\n-10391 Comment Length        0000 (0)\n-10393 Disk Start            0000 (0)\n-10395 Int File Attributes   0000 (0)\n+10513 Compression Method    0008 (8) 'Deflated'\n+10515 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10519 CRC                   DA74802F (3665068079)\n+1051D Compressed Size       000006E0 (1760)\n+10521 Uncompressed Size     00001C32 (7218)\n+10525 Filename Length       0068 (104)\n+10527 Extra Length          0000 (0)\n+10529 Comment Length        0000 (0)\n+1052B Disk Start            0000 (0)\n+1052D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10397 Ext File Attributes   81A40000 (2175008768)\n+1052F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1039B Local Header Offset   0000A60C (42508)\n-1039F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10533 Local Header Offset   0000A739 (42809)\n+10537 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1039F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10537: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10407 CENTRAL HEADER #55    02014B50 (33639248)\n-1040B Created Zip Spec      14 (20) '2.0'\n-1040C Created OS            03 (3) 'Unix'\n-1040D Extract Zip Spec      14 (20) '2.0'\n-1040E Extract OS            00 (0) 'MS-DOS'\n-1040F General Purpose Flag  0800 (2048)\n+1059F CENTRAL HEADER #55    02014B50 (33639248)\n+105A3 Created Zip Spec      14 (20) '2.0'\n+105A4 Created OS            03 (3) 'Unix'\n+105A5 Extract Zip Spec      14 (20) '2.0'\n+105A6 Extract OS            00 (0) 'MS-DOS'\n+105A7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10411 Compression Method    0008 (8) 'Deflated'\n-10413 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10417 CRC                   D216B32B (3524703019)\n-1041B Compressed Size       0000086D (2157)\n-1041F Uncompressed Size     00002C56 (11350)\n-10423 Filename Length       0049 (73)\n-10425 Extra Length          0000 (0)\n-10427 Comment Length        0000 (0)\n-10429 Disk Start            0000 (0)\n-1042B Int File Attributes   0000 (0)\n+105A9 Compression Method    0008 (8) 'Deflated'\n+105AB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+105AF CRC                   F8229510 (4163015952)\n+105B3 Compressed Size       0000087B (2171)\n+105B7 Uncompressed Size     00002D3F (11583)\n+105BB Filename Length       0049 (73)\n+105BD Extra Length          0000 (0)\n+105BF Comment Length        0000 (0)\n+105C1 Disk Start            0000 (0)\n+105C3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1042D Ext File Attributes   81A40000 (2175008768)\n+105C5 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10431 Local Header Offset   0000AD66 (44390)\n-10435 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+105C9 Local Header Offset   0000AE9F (44703)\n+105CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10435: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x105CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1047E CENTRAL HEADER #56    02014B50 (33639248)\n-10482 Created Zip Spec      14 (20) '2.0'\n-10483 Created OS            03 (3) 'Unix'\n-10484 Extract Zip Spec      14 (20) '2.0'\n-10485 Extract OS            00 (0) 'MS-DOS'\n-10486 General Purpose Flag  0800 (2048)\n+10616 CENTRAL HEADER #56    02014B50 (33639248)\n+1061A Created Zip Spec      14 (20) '2.0'\n+1061B Created OS            03 (3) 'Unix'\n+1061C Extract Zip Spec      14 (20) '2.0'\n+1061D Extract OS            00 (0) 'MS-DOS'\n+1061E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10488 Compression Method    0008 (8) 'Deflated'\n-1048A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1048E CRC                   94E29DCE (2497879502)\n-10492 Compressed Size       00000428 (1064)\n-10496 Uncompressed Size     00000A84 (2692)\n-1049A Filename Length       0055 (85)\n-1049C Extra Length          0000 (0)\n-1049E Comment Length        0000 (0)\n-104A0 Disk Start            0000 (0)\n-104A2 Int File Attributes   0000 (0)\n+10620 Compression Method    0008 (8) 'Deflated'\n+10622 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10626 CRC                   0206EE92 (34008722)\n+1062A Compressed Size       00000435 (1077)\n+1062E Uncompressed Size     00000ACC (2764)\n+10632 Filename Length       0055 (85)\n+10634 Extra Length          0000 (0)\n+10636 Comment Length        0000 (0)\n+10638 Disk Start            0000 (0)\n+1063A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-104A4 Ext File Attributes   81A40000 (2175008768)\n+1063C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-104A8 Local Header Offset   0000B63A (46650)\n-104AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10640 Local Header Offset   0000B781 (46977)\n+10644 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x104AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10644: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10501 CENTRAL HEADER #57    02014B50 (33639248)\n-10505 Created Zip Spec      14 (20) '2.0'\n-10506 Created OS            03 (3) 'Unix'\n-10507 Extract Zip Spec      14 (20) '2.0'\n-10508 Extract OS            00 (0) 'MS-DOS'\n-10509 General Purpose Flag  0800 (2048)\n+10699 CENTRAL HEADER #57    02014B50 (33639248)\n+1069D Created Zip Spec      14 (20) '2.0'\n+1069E Created OS            03 (3) 'Unix'\n+1069F Extract Zip Spec      14 (20) '2.0'\n+106A0 Extract OS            00 (0) 'MS-DOS'\n+106A1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1050B Compression Method    0008 (8) 'Deflated'\n-1050D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10511 CRC                   650D189A (1695357082)\n-10515 Compressed Size       000005BF (1471)\n-10519 Uncompressed Size     00001832 (6194)\n-1051D Filename Length       0044 (68)\n-1051F Extra Length          0000 (0)\n-10521 Comment Length        0000 (0)\n-10523 Disk Start            0000 (0)\n-10525 Int File Attributes   0000 (0)\n+106A3 Compression Method    0008 (8) 'Deflated'\n+106A5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+106A9 CRC                   D32166A2 (3542181538)\n+106AD Compressed Size       000005C7 (1479)\n+106B1 Uncompressed Size     000018C4 (6340)\n+106B5 Filename Length       0044 (68)\n+106B7 Extra Length          0000 (0)\n+106B9 Comment Length        0000 (0)\n+106BB Disk Start            0000 (0)\n+106BD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10527 Ext File Attributes   81A40000 (2175008768)\n+106BF Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1052B Local Header Offset   0000BAD5 (47829)\n-1052F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+106C3 Local Header Offset   0000BC29 (48169)\n+106C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1052F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x106C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10573 CENTRAL HEADER #58    02014B50 (33639248)\n-10577 Created Zip Spec      14 (20) '2.0'\n-10578 Created OS            03 (3) 'Unix'\n-10579 Extract Zip Spec      14 (20) '2.0'\n-1057A Extract OS            00 (0) 'MS-DOS'\n-1057B General Purpose Flag  0800 (2048)\n+1070B CENTRAL HEADER #58    02014B50 (33639248)\n+1070F Created Zip Spec      14 (20) '2.0'\n+10710 Created OS            03 (3) 'Unix'\n+10711 Extract Zip Spec      14 (20) '2.0'\n+10712 Extract OS            00 (0) 'MS-DOS'\n+10713 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1057D Compression Method    0008 (8) 'Deflated'\n-1057F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10583 CRC                   4BF9C614 (1274660372)\n-10587 Compressed Size       000002C3 (707)\n-1058B Uncompressed Size     000005BC (1468)\n-1058F Filename Length       0045 (69)\n-10591 Extra Length          0000 (0)\n-10593 Comment Length        0000 (0)\n-10595 Disk Start            0000 (0)\n-10597 Int File Attributes   0000 (0)\n+10715 Compression Method    0008 (8) 'Deflated'\n+10717 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1071B CRC                   F4B90302 (4105765634)\n+1071F Compressed Size       000002CA (714)\n+10723 Uncompressed Size     000005E9 (1513)\n+10727 Filename Length       0045 (69)\n+10729 Extra Length          0000 (0)\n+1072B Comment Length        0000 (0)\n+1072D Disk Start            0000 (0)\n+1072F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10599 Ext File Attributes   81A40000 (2175008768)\n+10731 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1059D Local Header Offset   0000C0F6 (49398)\n-105A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10735 Local Header Offset   0000C252 (49746)\n+10739 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x105A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10739: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-105E6 CENTRAL HEADER #59    02014B50 (33639248)\n-105EA Created Zip Spec      14 (20) '2.0'\n-105EB Created OS            03 (3) 'Unix'\n-105EC Extract Zip Spec      14 (20) '2.0'\n-105ED Extract OS            00 (0) 'MS-DOS'\n-105EE General Purpose Flag  0800 (2048)\n+1077E CENTRAL HEADER #59    02014B50 (33639248)\n+10782 Created Zip Spec      14 (20) '2.0'\n+10783 Created OS            03 (3) 'Unix'\n+10784 Extract Zip Spec      14 (20) '2.0'\n+10785 Extract OS            00 (0) 'MS-DOS'\n+10786 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-105F0 Compression Method    0008 (8) 'Deflated'\n-105F2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-105F6 CRC                   78DAF5DB (2027615707)\n-105FA Compressed Size       000004DB (1243)\n-105FE Uncompressed Size     00000DB3 (3507)\n-10602 Filename Length       0045 (69)\n-10604 Extra Length          0000 (0)\n-10606 Comment Length        0000 (0)\n-10608 Disk Start            0000 (0)\n-1060A Int File Attributes   0000 (0)\n+10788 Compression Method    0008 (8) 'Deflated'\n+1078A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1078E CRC                   EB53D86B (3948140651)\n+10792 Compressed Size       000004E6 (1254)\n+10796 Uncompressed Size     00000E11 (3601)\n+1079A Filename Length       0045 (69)\n+1079C Extra Length          0000 (0)\n+1079E Comment Length        0000 (0)\n+107A0 Disk Start            0000 (0)\n+107A2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1060C Ext File Attributes   81A40000 (2175008768)\n+107A4 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10610 Local Header Offset   0000C41C (50204)\n-10614 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+107A8 Local Header Offset   0000C57F (50559)\n+107AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10614: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x107AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10659 CENTRAL HEADER #60    02014B50 (33639248)\n-1065D Created Zip Spec      14 (20) '2.0'\n-1065E Created OS            03 (3) 'Unix'\n-1065F Extract Zip Spec      14 (20) '2.0'\n-10660 Extract OS            00 (0) 'MS-DOS'\n-10661 General Purpose Flag  0800 (2048)\n+107F1 CENTRAL HEADER #60    02014B50 (33639248)\n+107F5 Created Zip Spec      14 (20) '2.0'\n+107F6 Created OS            03 (3) 'Unix'\n+107F7 Extract Zip Spec      14 (20) '2.0'\n+107F8 Extract OS            00 (0) 'MS-DOS'\n+107F9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10663 Compression Method    0008 (8) 'Deflated'\n-10665 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10669 CRC                   F812A548 (4161971528)\n-1066D Compressed Size       00000636 (1590)\n-10671 Uncompressed Size     00001C13 (7187)\n-10675 Filename Length       0045 (69)\n-10677 Extra Length          0000 (0)\n-10679 Comment Length        0000 (0)\n-1067B Disk Start            0000 (0)\n-1067D Int File Attributes   0000 (0)\n+107FB Compression Method    0008 (8) 'Deflated'\n+107FD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10801 CRC                   29BE548C (700339340)\n+10805 Compressed Size       0000063F (1599)\n+10809 Uncompressed Size     00001CAF (7343)\n+1080D Filename Length       0045 (69)\n+1080F Extra Length          0000 (0)\n+10811 Comment Length        0000 (0)\n+10813 Disk Start            0000 (0)\n+10815 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1067F Ext File Attributes   81A40000 (2175008768)\n+10817 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10683 Local Header Offset   0000C95A (51546)\n-10687 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1081B Local Header Offset   0000CAC8 (51912)\n+1081F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10687: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1081F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-106CC CENTRAL HEADER #61    02014B50 (33639248)\n-106D0 Created Zip Spec      14 (20) '2.0'\n-106D1 Created OS            03 (3) 'Unix'\n-106D2 Extract Zip Spec      14 (20) '2.0'\n-106D3 Extract OS            00 (0) 'MS-DOS'\n-106D4 General Purpose Flag  0800 (2048)\n+10864 CENTRAL HEADER #61    02014B50 (33639248)\n+10868 Created Zip Spec      14 (20) '2.0'\n+10869 Created OS            03 (3) 'Unix'\n+1086A Extract Zip Spec      14 (20) '2.0'\n+1086B Extract OS            00 (0) 'MS-DOS'\n+1086C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-106D6 Compression Method    0008 (8) 'Deflated'\n-106D8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-106DC CRC                   D5E82AF6 (3588762358)\n-106E0 Compressed Size       000005E7 (1511)\n-106E4 Uncompressed Size     0000139A (5018)\n-106E8 Filename Length       0050 (80)\n-106EA Extra Length          0000 (0)\n-106EC Comment Length        0000 (0)\n-106EE Disk Start            0000 (0)\n-106F0 Int File Attributes   0000 (0)\n+1086E Compression Method    0008 (8) 'Deflated'\n+10870 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10874 CRC                   509E2681 (1352541825)\n+10878 Compressed Size       000005F5 (1525)\n+1087C Uncompressed Size     00001423 (5155)\n+10880 Filename Length       0050 (80)\n+10882 Extra Length          0000 (0)\n+10884 Comment Length        0000 (0)\n+10886 Disk Start            0000 (0)\n+10888 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-106F2 Ext File Attributes   81A40000 (2175008768)\n+1088A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-106F6 Local Header Offset   0000CFF3 (53235)\n-106FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1088E Local Header Offset   0000D16A (53610)\n+10892 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x106FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10892: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1074A CENTRAL HEADER #62    02014B50 (33639248)\n-1074E Created Zip Spec      14 (20) '2.0'\n-1074F Created OS            03 (3) 'Unix'\n-10750 Extract Zip Spec      14 (20) '2.0'\n-10751 Extract OS            00 (0) 'MS-DOS'\n-10752 General Purpose Flag  0800 (2048)\n+108E2 CENTRAL HEADER #62    02014B50 (33639248)\n+108E6 Created Zip Spec      14 (20) '2.0'\n+108E7 Created OS            03 (3) 'Unix'\n+108E8 Extract Zip Spec      14 (20) '2.0'\n+108E9 Extract OS            00 (0) 'MS-DOS'\n+108EA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10754 Compression Method    0008 (8) 'Deflated'\n-10756 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1075A CRC                   CA23CF9D (3391344541)\n-1075E Compressed Size       00000B88 (2952)\n-10762 Uncompressed Size     00003C74 (15476)\n-10766 Filename Length       0043 (67)\n-10768 Extra Length          0000 (0)\n-1076A Comment Length        0000 (0)\n-1076C Disk Start            0000 (0)\n-1076E Int File Attributes   0000 (0)\n+108EC Compression Method    0008 (8) 'Deflated'\n+108EE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+108F2 CRC                   59E77649 (1508341321)\n+108F6 Compressed Size       00000B95 (2965)\n+108FA Uncompressed Size     00003E03 (15875)\n+108FE Filename Length       0043 (67)\n+10900 Extra Length          0000 (0)\n+10902 Comment Length        0000 (0)\n+10904 Disk Start            0000 (0)\n+10906 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10770 Ext File Attributes   81A40000 (2175008768)\n+10908 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10774 Local Header Offset   0000D648 (54856)\n-10778 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1090C Local Header Offset   0000D7CD (55245)\n+10910 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10778: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10910: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-107BB CENTRAL HEADER #63    02014B50 (33639248)\n-107BF Created Zip Spec      14 (20) '2.0'\n-107C0 Created OS            03 (3) 'Unix'\n-107C1 Extract Zip Spec      14 (20) '2.0'\n-107C2 Extract OS            00 (0) 'MS-DOS'\n-107C3 General Purpose Flag  0800 (2048)\n+10953 CENTRAL HEADER #63    02014B50 (33639248)\n+10957 Created Zip Spec      14 (20) '2.0'\n+10958 Created OS            03 (3) 'Unix'\n+10959 Extract Zip Spec      14 (20) '2.0'\n+1095A Extract OS            00 (0) 'MS-DOS'\n+1095B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-107C5 Compression Method    0008 (8) 'Deflated'\n-107C7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-107CB CRC                   7D02909B (2097320091)\n-107CF Compressed Size       0000009A (154)\n-107D3 Uncompressed Size     000002B1 (689)\n-107D7 Filename Length       0065 (101)\n-107D9 Extra Length          0000 (0)\n-107DB Comment Length        0000 (0)\n-107DD Disk Start            0000 (0)\n-107DF Int File Attributes   0000 (0)\n+1095D Compression Method    0008 (8) 'Deflated'\n+1095F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10963 CRC                   6A2B9F74 (1781243764)\n+10967 Compressed Size       0000009D (157)\n+1096B Uncompressed Size     000002B7 (695)\n+1096F Filename Length       0065 (101)\n+10971 Extra Length          0000 (0)\n+10973 Comment Length        0000 (0)\n+10975 Disk Start            0000 (0)\n+10977 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-107E1 Ext File Attributes   81A40000 (2175008768)\n+10979 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-107E5 Local Header Offset   0000E231 (57905)\n-107E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1097D Local Header Offset   0000E3C3 (58307)\n+10981 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x107E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10981: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1084E CENTRAL HEADER #64    02014B50 (33639248)\n-10852 Created Zip Spec      14 (20) '2.0'\n-10853 Created OS            03 (3) 'Unix'\n-10854 Extract Zip Spec      14 (20) '2.0'\n-10855 Extract OS            00 (0) 'MS-DOS'\n-10856 General Purpose Flag  0800 (2048)\n+109E6 CENTRAL HEADER #64    02014B50 (33639248)\n+109EA Created Zip Spec      14 (20) '2.0'\n+109EB Created OS            03 (3) 'Unix'\n+109EC Extract Zip Spec      14 (20) '2.0'\n+109ED Extract OS            00 (0) 'MS-DOS'\n+109EE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10858 Compression Method    0008 (8) 'Deflated'\n-1085A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1085E CRC                   4B8794AA (1267176618)\n-10862 Compressed Size       000000DF (223)\n-10866 Uncompressed Size     00000365 (869)\n-1086A Filename Length       006E (110)\n-1086C Extra Length          0000 (0)\n-1086E Comment Length        0000 (0)\n-10870 Disk Start            0000 (0)\n-10872 Int File Attributes   0000 (0)\n+109F0 Compression Method    0008 (8) 'Deflated'\n+109F2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+109F6 CRC                   64601D37 (1684020535)\n+109FA Compressed Size       000000E4 (228)\n+109FE Uncompressed Size     0000036E (878)\n+10A02 Filename Length       006E (110)\n+10A04 Extra Length          0000 (0)\n+10A06 Comment Length        0000 (0)\n+10A08 Disk Start            0000 (0)\n+10A0A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10874 Ext File Attributes   81A40000 (2175008768)\n+10A0C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10878 Local Header Offset   0000E34E (58190)\n-1087C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10A10 Local Header Offset   0000E4E3 (58595)\n+10A14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1087C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10A14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-108EA CENTRAL HEADER #65    02014B50 (33639248)\n-108EE Created Zip Spec      14 (20) '2.0'\n-108EF Created OS            03 (3) 'Unix'\n-108F0 Extract Zip Spec      14 (20) '2.0'\n-108F1 Extract OS            00 (0) 'MS-DOS'\n-108F2 General Purpose Flag  0800 (2048)\n+10A82 CENTRAL HEADER #65    02014B50 (33639248)\n+10A86 Created Zip Spec      14 (20) '2.0'\n+10A87 Created OS            03 (3) 'Unix'\n+10A88 Extract Zip Spec      14 (20) '2.0'\n+10A89 Extract OS            00 (0) 'MS-DOS'\n+10A8A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-108F4 Compression Method    0008 (8) 'Deflated'\n-108F6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-108FA CRC                   26007615 (637564437)\n-108FE Compressed Size       00000081 (129)\n-10902 Uncompressed Size     0000013A (314)\n-10906 Filename Length       0068 (104)\n-10908 Extra Length          0000 (0)\n-1090A Comment Length        0000 (0)\n-1090C Disk Start            0000 (0)\n-1090E Int File Attributes   0000 (0)\n+10A8C Compression Method    0008 (8) 'Deflated'\n+10A8E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10A92 CRC                   4EAEA219 (1320067609)\n+10A96 Compressed Size       00000083 (131)\n+10A9A Uncompressed Size     0000013C (316)\n+10A9E Filename Length       0068 (104)\n+10AA0 Extra Length          0000 (0)\n+10AA2 Comment Length        0000 (0)\n+10AA4 Disk Start            0000 (0)\n+10AA6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10910 Ext File Attributes   81A40000 (2175008768)\n+10AA8 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10914 Local Header Offset   0000E4B9 (58553)\n-10918 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10AAC Local Header Offset   0000E653 (58963)\n+10AB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10918: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10AB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10980 CENTRAL HEADER #66    02014B50 (33639248)\n-10984 Created Zip Spec      14 (20) '2.0'\n-10985 Created OS            03 (3) 'Unix'\n-10986 Extract Zip Spec      14 (20) '2.0'\n-10987 Extract OS            00 (0) 'MS-DOS'\n-10988 General Purpose Flag  0800 (2048)\n+10B18 CENTRAL HEADER #66    02014B50 (33639248)\n+10B1C Created Zip Spec      14 (20) '2.0'\n+10B1D Created OS            03 (3) 'Unix'\n+10B1E Extract Zip Spec      14 (20) '2.0'\n+10B1F Extract OS            00 (0) 'MS-DOS'\n+10B20 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1098A Compression Method    0008 (8) 'Deflated'\n-1098C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10990 CRC                   4D28F6B5 (1294530229)\n-10994 Compressed Size       0000005A (90)\n-10998 Uncompressed Size     000000B9 (185)\n-1099C Filename Length       0037 (55)\n-1099E Extra Length          0000 (0)\n-109A0 Comment Length        0000 (0)\n-109A2 Disk Start            0000 (0)\n-109A4 Int File Attributes   0000 (0)\n+10B22 Compression Method    0008 (8) 'Deflated'\n+10B24 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10B28 CRC                   258A92FD (629838589)\n+10B2C Compressed Size       0000005B (91)\n+10B30 Uncompressed Size     000000BB (187)\n+10B34 Filename Length       0037 (55)\n+10B36 Extra Length          0000 (0)\n+10B38 Comment Length        0000 (0)\n+10B3A Disk Start            0000 (0)\n+10B3C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-109A6 Ext File Attributes   81A40000 (2175008768)\n+10B3E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-109AA Local Header Offset   0000E5C0 (58816)\n-109AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10B42 Local Header Offset   0000E75C (59228)\n+10B46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x109AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10B46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-109E5 CENTRAL HEADER #67    02014B50 (33639248)\n-109E9 Created Zip Spec      14 (20) '2.0'\n-109EA Created OS            03 (3) 'Unix'\n-109EB Extract Zip Spec      14 (20) '2.0'\n-109EC Extract OS            00 (0) 'MS-DOS'\n-109ED General Purpose Flag  0800 (2048)\n+10B7D CENTRAL HEADER #67    02014B50 (33639248)\n+10B81 Created Zip Spec      14 (20) '2.0'\n+10B82 Created OS            03 (3) 'Unix'\n+10B83 Extract Zip Spec      14 (20) '2.0'\n+10B84 Extract OS            00 (0) 'MS-DOS'\n+10B85 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-109EF Compression Method    0008 (8) 'Deflated'\n-109F1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-109F5 CRC                   E5DF924E (3856634446)\n-109F9 Compressed Size       000004C9 (1225)\n-109FD Uncompressed Size     000017BA (6074)\n-10A01 Filename Length       0040 (64)\n-10A03 Extra Length          0000 (0)\n-10A05 Comment Length        0000 (0)\n-10A07 Disk Start            0000 (0)\n-10A09 Int File Attributes   0000 (0)\n+10B87 Compression Method    0008 (8) 'Deflated'\n+10B89 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10B8D CRC                   72E0714C (1927311692)\n+10B91 Compressed Size       000004C4 (1220)\n+10B95 Uncompressed Size     00001712 (5906)\n+10B99 Filename Length       0040 (64)\n+10B9B Extra Length          0000 (0)\n+10B9D Comment Length        0000 (0)\n+10B9F Disk Start            0000 (0)\n+10BA1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10A0B Ext File Attributes   81A40000 (2175008768)\n+10BA3 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10A0F Local Header Offset   0000E66F (58991)\n-10A13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10BA7 Local Header Offset   0000E80C (59404)\n+10BAB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10A13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10BAB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10A53 CENTRAL HEADER #68    02014B50 (33639248)\n-10A57 Created Zip Spec      14 (20) '2.0'\n-10A58 Created OS            03 (3) 'Unix'\n-10A59 Extract Zip Spec      14 (20) '2.0'\n-10A5A Extract OS            00 (0) 'MS-DOS'\n-10A5B General Purpose Flag  0800 (2048)\n+10BEB CENTRAL HEADER #68    02014B50 (33639248)\n+10BEF Created Zip Spec      14 (20) '2.0'\n+10BF0 Created OS            03 (3) 'Unix'\n+10BF1 Extract Zip Spec      14 (20) '2.0'\n+10BF2 Extract OS            00 (0) 'MS-DOS'\n+10BF3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10A5D Compression Method    0008 (8) 'Deflated'\n-10A5F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10A63 CRC                   619C8D42 (1637649730)\n-10A67 Compressed Size       0000004B (75)\n-10A6B Uncompressed Size     0000004F (79)\n-10A6F Filename Length       0047 (71)\n-10A71 Extra Length          0000 (0)\n-10A73 Comment Length        0000 (0)\n-10A75 Disk Start            0000 (0)\n-10A77 Int File Attributes   0000 (0)\n+10BF5 Compression Method    0008 (8) 'Deflated'\n+10BF7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10BFB CRC                   619C8D42 (1637649730)\n+10BFF Compressed Size       0000004B (75)\n+10C03 Uncompressed Size     0000004F (79)\n+10C07 Filename Length       0047 (71)\n+10C09 Extra Length          0000 (0)\n+10C0B Comment Length        0000 (0)\n+10C0D Disk Start            0000 (0)\n+10C0F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10A79 Ext File Attributes   81A40000 (2175008768)\n+10C11 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10A7D Local Header Offset   0000EB96 (60310)\n-10A81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10C15 Local Header Offset   0000ED2E (60718)\n+10C19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10A81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10C19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10AC8 END CENTRAL HEADER    06054B50 (101010256)\n-10ACC Number of this disk   0000 (0)\n-10ACE Central Dir Disk no   0000 (0)\n-10AD0 Entries in this disk  0044 (68)\n-10AD2 Total Entries         0044 (68)\n-10AD4 Size of Central Dir   00001E82 (7810)\n-10AD8 Offset to Central Dir 0000EC46 (60486)\n-10ADC Comment Length        0000 (0)\n+10C60 END CENTRAL HEADER    06054B50 (101010256)\n+10C64 Number of this disk   0000 (0)\n+10C66 Central Dir Disk no   0000 (0)\n+10C68 Entries in this disk  0044 (68)\n+10C6A Total Entries         0044 (68)\n+10C6C Size of Central Dir   00001E82 (7810)\n+10C70 Offset to Central Dir 0000EDDE (60894)\n+10C74 Comment Length        0000 (0)\n #\n # Error Count: 18\n # Warning Count: 154\n #\n # Done\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java", "comments": ["Ordering 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.metadata.annotation.processing;\n-\n-import javax.annotation.processing.AbstractProcessor;\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.annotation.processing.Processor;\n-import javax.lang.model.SourceVersion;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.ElementKind;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.PackageElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.util.Elements;\n-import java.util.HashMap;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-\n-import static javax.lang.model.util.ElementFilter.methodsIn;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.SUPPORTED_ANNOTATION_TYPES;\n-\n-/**\n- * Abstract {@link Processor} for the classes that were annotated by Dubbo's @Service\n- *\n- * @since 2.7.6\n- */\n-public abstract class AbstractServiceAnnotationProcessor extends AbstractProcessor {\n-\n-    protected Elements elements;\n-\n-    private List<? extends Element> objectMembers;\n-\n-    public synchronized void init(ProcessingEnvironment processingEnv) {\n-        super.init(processingEnv);\n-        this.elements = processingEnv.getElementUtils();\n-        this.objectMembers = elements.getAllMembers(elements.getTypeElement(Object.class.getName()));\n-    }\n-\n-    protected List<? extends Element> getActualMembers(TypeElement type) {\n-        List<? extends Element> members = new LinkedList<>(elements.getAllMembers(type));\n-        members.removeAll(objectMembers);\n-        return members;\n-    }\n-\n-    protected List<? extends ExecutableElement> getActualMethods(TypeElement type) {\n-        return methodsIn(getActualMembers(type));\n-    }\n-\n-    protected Map<String, ExecutableElement> getActualMethodsMap(TypeElement type) {\n-        Map<String, ExecutableElement> methodsMap = new HashMap<>();\n-        getActualMethods(type).forEach(method -> {\n-            methodsMap.put(method.toString(), method);\n-        });\n-        return methodsMap;\n-    }\n-\n-    public static String getMethodSignature(ExecutableElement method) {\n-        if (!ElementKind.METHOD.equals(method.getKind())) {\n-            throw new IllegalArgumentException(\"The argument must be Method Kind\");\n-        }\n-\n-        StringBuilder methodSignatureBuilder = new StringBuilder();\n-\n-        method.getModifiers().forEach(member -> {\n-            methodSignatureBuilder.append(member).append(\" \");\n-        });\n-\n-        methodSignatureBuilder.append(method.getReturnType())\n-                .append(\" \")\n-                .append(method.toString());\n-\n-        return methodSignatureBuilder.toString();\n-    }\n-\n-    protected TypeElement getTypeElement(CharSequence className) {\n-        return elements.getTypeElement(className);\n-    }\n-\n-    protected PackageElement getPackageElement(Element type) {\n-        return this.elements.getPackageOf(type);\n-    }\n-\n-    @Override\n-    public SourceVersion getSupportedSourceVersion() {\n-        return SourceVersion.latest();\n-    }\n-\n-    @Override\n-    public final Set<String> getSupportedAnnotationTypes() {\n-        return SUPPORTED_ANNOTATION_TYPES;\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.metadata.annotation.processing;\r\n+\r\n+import javax.annotation.processing.AbstractProcessor;\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.annotation.processing.Processor;\r\n+import javax.lang.model.SourceVersion;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.ElementKind;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.PackageElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.util.Elements;\r\n+import java.util.HashMap;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+\r\n+import static javax.lang.model.util.ElementFilter.methodsIn;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.SUPPORTED_ANNOTATION_TYPES;\r\n+\r\n+/**\r\n+ * Abstract {@link Processor} for the classes that were annotated by Dubbo's @Service\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class AbstractServiceAnnotationProcessor extends AbstractProcessor {\r\n+\r\n+    protected Elements elements;\r\n+\r\n+    private List<? extends Element> objectMembers;\r\n+\r\n+    public synchronized void init(ProcessingEnvironment processingEnv) {\r\n+        super.init(processingEnv);\r\n+        this.elements = processingEnv.getElementUtils();\r\n+        this.objectMembers = elements.getAllMembers(elements.getTypeElement(Object.class.getName()));\r\n+    }\r\n+\r\n+    protected List<? extends Element> getActualMembers(TypeElement type) {\r\n+        List<? extends Element> members = new LinkedList<>(elements.getAllMembers(type));\r\n+        members.removeAll(objectMembers);\r\n+        return members;\r\n+    }\r\n+\r\n+    protected List<? extends ExecutableElement> getActualMethods(TypeElement type) {\r\n+        return methodsIn(getActualMembers(type));\r\n+    }\r\n+\r\n+    protected Map<String, ExecutableElement> getActualMethodsMap(TypeElement type) {\r\n+        Map<String, ExecutableElement> methodsMap = new HashMap<>();\r\n+        getActualMethods(type).forEach(method -> {\r\n+            methodsMap.put(method.toString(), method);\r\n+        });\r\n+        return methodsMap;\r\n+    }\r\n+\r\n+    public static String getMethodSignature(ExecutableElement method) {\r\n+        if (!ElementKind.METHOD.equals(method.getKind())) {\r\n+            throw new IllegalArgumentException(\"The argument must be Method Kind\");\r\n+        }\r\n+\r\n+        StringBuilder methodSignatureBuilder = new StringBuilder();\r\n+\r\n+        method.getModifiers().forEach(member -> {\r\n+            methodSignatureBuilder.append(member).append(\" \");\r\n+        });\r\n+\r\n+        methodSignatureBuilder.append(method.getReturnType())\r\n+                .append(\" \")\r\n+                .append(method.toString());\r\n+\r\n+        return methodSignatureBuilder.toString();\r\n+    }\r\n+\r\n+    protected TypeElement getTypeElement(CharSequence className) {\r\n+        return elements.getTypeElement(className);\r\n+    }\r\n+\r\n+    protected PackageElement getPackageElement(Element type) {\r\n+        return this.elements.getPackageOf(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public SourceVersion getSupportedSourceVersion() {\r\n+        return SourceVersion.latest();\r\n+    }\r\n+\r\n+    @Override\r\n+    public final Set<String> getSupportedAnnotationTypes() {\r\n+        return SUPPORTED_ANNOTATION_TYPES;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/ClassPathMetadataStorage.java", "source2": "org/apache/dubbo/metadata/annotation/processing/ClassPathMetadataStorage.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,105 +1,105 @@\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.metadata.annotation.processing;\n-\n-\n-import javax.annotation.processing.Filer;\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.tools.FileObject;\n-import java.io.File;\n-import java.io.IOException;\n-import java.io.Reader;\n-import java.io.Writer;\n-import java.util.Optional;\n-import java.util.function.Function;\n-import java.util.function.Supplier;\n-\n-import static java.util.Optional.empty;\n-import static java.util.Optional.ofNullable;\n-import static javax.tools.StandardLocation.CLASS_OUTPUT;\n-import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.info;\n-import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.warn;\n-\n-/**\n- * A storage class for metadata under class path\n- */\n-public class ClassPathMetadataStorage {\n-\n-    private final Filer filer;\n-\n-    public ClassPathMetadataStorage(ProcessingEnvironment processingEnv) {\n-        this.filer = processingEnv.getFiler();\n-    }\n-\n-    public void write(Supplier<String> contentSupplier, String resourceName) {\n-        try (Writer writer = getWriter(resourceName)) {\n-            writer.write(contentSupplier.get());\n-        } catch (IOException e) {\n-            throw new RuntimeException(e);\n-        }\n-    }\n-\n-    public <T> Optional<T> read(String resourceName, Function<Reader, T> consumer) {\n-        if (exists(resourceName)) {\n-            try (Reader reader = getReader(resourceName)) {\n-                return ofNullable(consumer.apply(reader));\n-            } catch (IOException e) {\n-                throw new RuntimeException(e);\n-            }\n-        }\n-        return empty();\n-    }\n-\n-    private boolean exists(String resourceName) {\n-\n-        return getResource(resourceName)\n-                .map(FileObject::toUri)\n-                .map(File::new)\n-                .map(File::exists)\n-                .orElse(false);\n-    }\n-\n-    private Reader getReader(String resourceName) {\n-        return getResource(resourceName).map(fileObject -> {\n-            try {\n-                return fileObject.openReader(false);\n-            } catch (IOException e) {\n-            }\n-            return null;\n-        }).orElse(null);\n-    }\n-\n-    private FileObject createResource(String resourceName) throws IOException {\n-        return filer.createResource(CLASS_OUTPUT, \"\", resourceName);\n-    }\n-\n-    private Optional<FileObject> getResource(String resourceName) {\n-        try {\n-            FileObject fileObject = filer.getResource(CLASS_OUTPUT, \"\", resourceName);\n-            return ofNullable(fileObject);\n-        } catch (IOException e) {\n-            warn(e.getMessage());\n-        }\n-        return empty();\n-    }\n-\n-    private Writer getWriter(String resourceName) throws IOException {\n-        FileObject fileObject = createResource(resourceName);\n-        info(\"The resource[path : %s , deleted : %s] will be written\", fileObject.toUri().getPath(), fileObject.delete());\n-        return fileObject.openWriter();\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.metadata.annotation.processing;\r\n+\r\n+\r\n+import javax.annotation.processing.Filer;\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.tools.FileObject;\r\n+import java.io.File;\r\n+import java.io.IOException;\r\n+import java.io.Reader;\r\n+import java.io.Writer;\r\n+import java.util.Optional;\r\n+import java.util.function.Function;\r\n+import java.util.function.Supplier;\r\n+\r\n+import static java.util.Optional.empty;\r\n+import static java.util.Optional.ofNullable;\r\n+import static javax.tools.StandardLocation.CLASS_OUTPUT;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.info;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.warn;\r\n+\r\n+/**\r\n+ * A storage class for metadata under class path\r\n+ */\r\n+public class ClassPathMetadataStorage {\r\n+\r\n+    private final Filer filer;\r\n+\r\n+    public ClassPathMetadataStorage(ProcessingEnvironment processingEnv) {\r\n+        this.filer = processingEnv.getFiler();\r\n+    }\r\n+\r\n+    public void write(Supplier<String> contentSupplier, String resourceName) {\r\n+        try (Writer writer = getWriter(resourceName)) {\r\n+            writer.write(contentSupplier.get());\r\n+        } catch (IOException e) {\r\n+            throw new RuntimeException(e);\r\n+        }\r\n+    }\r\n+\r\n+    public <T> Optional<T> read(String resourceName, Function<Reader, T> consumer) {\r\n+        if (exists(resourceName)) {\r\n+            try (Reader reader = getReader(resourceName)) {\r\n+                return ofNullable(consumer.apply(reader));\r\n+            } catch (IOException e) {\r\n+                throw new RuntimeException(e);\r\n+            }\r\n+        }\r\n+        return empty();\r\n+    }\r\n+\r\n+    private boolean exists(String resourceName) {\r\n+\r\n+        return getResource(resourceName)\r\n+                .map(FileObject::toUri)\r\n+                .map(File::new)\r\n+                .map(File::exists)\r\n+                .orElse(false);\r\n+    }\r\n+\r\n+    private Reader getReader(String resourceName) {\r\n+        return getResource(resourceName).map(fileObject -> {\r\n+            try {\r\n+                return fileObject.openReader(false);\r\n+            } catch (IOException e) {\r\n+            }\r\n+            return null;\r\n+        }).orElse(null);\r\n+    }\r\n+\r\n+    private FileObject createResource(String resourceName) throws IOException {\r\n+        return filer.createResource(CLASS_OUTPUT, \"\", resourceName);\r\n+    }\r\n+\r\n+    private Optional<FileObject> getResource(String resourceName) {\r\n+        try {\r\n+            FileObject fileObject = filer.getResource(CLASS_OUTPUT, \"\", resourceName);\r\n+            return ofNullable(fileObject);\r\n+        } catch (IOException e) {\r\n+            warn(e.getMessage());\r\n+        }\r\n+        return empty();\r\n+    }\r\n+\r\n+    private Writer getWriter(String resourceName) throws IOException {\r\n+        FileObject fileObject = createResource(resourceName);\r\n+        info(\"The resource[path : %s , deleted : %s] will be written\", fileObject.toUri().getPath(), fileObject.delete());\r\n+        return fileObject.openWriter();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/ServiceDefinitionMetadataAnnotationProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/ServiceDefinitionMetadataAnnotationProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,60 +1,60 @@\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.metadata.annotation.processing;\n-\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-\n-import com.google.gson.Gson;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.annotation.processing.Processor;\n-import javax.annotation.processing.RoundEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Set;\n-\n-import static javax.lang.model.util.ElementFilter.typesIn;\n-import static org.apache.dubbo.metadata.annotation.processing.builder.ServiceDefinitionBuilder.build;\n-\n-/**\n- * The {@link Processor} class to generate the metadata of {@link ServiceDefinition} whose classes are annotated by Dubbo's @Service\n- *\n- * @see Processor\n- * @since 2.7.6\n- */\n-public class ServiceDefinitionMetadataAnnotationProcessor extends AbstractServiceAnnotationProcessor {\n-\n-    private List<ServiceDefinition> serviceDefinitions = new LinkedList<>();\n-\n-    @Override\n-    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {\n-\n-        typesIn(roundEnv.getRootElements()).forEach(serviceType -> process(processingEnv, serviceType, annotations));\n-\n-        if (roundEnv.processingOver()) {\n-            ClassPathMetadataStorage writer = new ClassPathMetadataStorage(processingEnv);\n-            writer.write(() -> new Gson().toJson(serviceDefinitions), \"META-INF/dubbo/service-definitions.json\");\n-        }\n-\n-        return false;\n-    }\n-\n-    private void process(ProcessingEnvironment processingEnv, TypeElement serviceType, Set<? extends TypeElement> annotations) {\n-        serviceDefinitions.add(build(processingEnv, serviceType));\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.metadata.annotation.processing;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+\r\n+import com.google.gson.Gson;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.annotation.processing.Processor;\r\n+import javax.annotation.processing.RoundEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+\r\n+import static javax.lang.model.util.ElementFilter.typesIn;\r\n+import static org.apache.dubbo.metadata.annotation.processing.builder.ServiceDefinitionBuilder.build;\r\n+\r\n+/**\r\n+ * The {@link Processor} class to generate the metadata of {@link ServiceDefinition} whose classes are annotated by Dubbo's @Service\r\n+ *\r\n+ * @see Processor\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ServiceDefinitionMetadataAnnotationProcessor extends AbstractServiceAnnotationProcessor {\r\n+\r\n+    private List<ServiceDefinition> serviceDefinitions = new LinkedList<>();\r\n+\r\n+    @Override\r\n+    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {\r\n+\r\n+        typesIn(roundEnv.getRootElements()).forEach(serviceType -> process(processingEnv, serviceType, annotations));\r\n+\r\n+        if (roundEnv.processingOver()) {\r\n+            ClassPathMetadataStorage writer = new ClassPathMetadataStorage(processingEnv);\r\n+            writer.write(() -> new Gson().toJson(serviceDefinitions), \"META-INF/dubbo/service-definitions.json\");\r\n+        }\r\n+\r\n+        return false;\r\n+    }\r\n+\r\n+    private void process(ProcessingEnvironment processingEnv, TypeElement serviceType, Set<? extends TypeElement> annotations) {\r\n+        serviceDefinitions.add(build(processingEnv, serviceType));\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/ArrayTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/ArrayTypeDefinitionBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,50 +1,50 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.type.ArrayType;\n-import javax.lang.model.type.TypeMirror;\n-import java.lang.reflect.Array;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isArrayType;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for Java {@link Array}\n- *\n- * @since 2.7.6\n- */\n-public class ArrayTypeDefinitionBuilder implements TypeDefinitionBuilder<ArrayType> {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        return isArrayType(type);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, ArrayType type, TypeDefinition typeDefinition) {\n-        TypeMirror componentType = type.getComponentType();\n-        typeDefinition.getItems().add(TypeDefinitionBuilder.build(processingEnv, componentType));\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 4;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.type.ArrayType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import java.lang.reflect.Array;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isArrayType;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for Java {@link Array}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ArrayTypeDefinitionBuilder implements TypeDefinitionBuilder<ArrayType> {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        return isArrayType(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, ArrayType type, TypeDefinition typeDefinition) {\r\n+        TypeMirror componentType = type.getComponentType();\r\n+        typeDefinition.getItems().add(TypeDefinitionBuilder.build(processingEnv, componentType));\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 4;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/CollectionTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/CollectionTypeDefinitionBuilder.java", "comments": ["Ordering 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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.type.DeclaredType;\n-import javax.lang.model.type.TypeMirror;\n-import javax.lang.model.util.Elements;\n-import javax.lang.model.util.Types;\n-import java.util.Collection;\n-import java.util.Objects;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for Java {@link Collection}\n- *\n- * @since 2.7.6\n- */\n-public class CollectionTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\n-        Elements elements = processingEnv.getElementUtils();\n-        TypeElement collectionTypeElement = elements.getTypeElement(Collection.class.getTypeName());\n-        TypeMirror collectionType = collectionTypeElement.asType();\n-        Types types = processingEnv.getTypeUtils();\n-        TypeMirror erasedType = types.erasure(type);\n-        return types.isAssignable(erasedType, collectionType);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\n-        // Generic Type arguments\n-        type.getTypeArguments()\n-                .stream()\n-                .map(typeArgument -> TypeDefinitionBuilder.build(processingEnv, typeArgument)) // build the TypeDefinition from typeArgument\n-                .filter(Objects::nonNull)\n-                .forEach(typeDefinition.getItems()::add);                              // Add into the declared TypeDefinition\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 5;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.type.DeclaredType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import javax.lang.model.util.Elements;\r\n+import javax.lang.model.util.Types;\r\n+import java.util.Collection;\r\n+import java.util.Objects;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for Java {@link Collection}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class CollectionTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\r\n+        Elements elements = processingEnv.getElementUtils();\r\n+        TypeElement collectionTypeElement = elements.getTypeElement(Collection.class.getTypeName());\r\n+        TypeMirror collectionType = collectionTypeElement.asType();\r\n+        Types types = processingEnv.getTypeUtils();\r\n+        TypeMirror erasedType = types.erasure(type);\r\n+        return types.isAssignable(erasedType, collectionType);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\r\n+        // Generic Type arguments\r\n+        type.getTypeArguments()\r\n+                .stream()\r\n+                .map(typeArgument -> TypeDefinitionBuilder.build(processingEnv, typeArgument)) // build the TypeDefinition from typeArgument\r\n+                .filter(Objects::nonNull)\r\n+                .forEach(typeDefinition.getItems()::add);                              // Add into the declared TypeDefinition\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 5;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/DeclaredTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/DeclaredTypeDefinitionBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,49 +1,49 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.annotation.processing.builder;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.type.DeclaredType;\n-import javax.lang.model.type.TypeMirror;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofDeclaredType;\n-\n-/**\n- * An interface of {@link TypeDefinitionBuilder} for {@link DeclaredType}\n- *\n- * @since 2.7.6\n- */\n-public interface DeclaredTypeDefinitionBuilder extends TypeDefinitionBuilder<DeclaredType> {\n-\n-    @Override\n-    default boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        if (declaredType == null) {\n-            return false;\n-        }\n-        return accept(processingEnv, declaredType);\n-    }\n-\n-    /**\n-     * Test the specified {@link DeclaredType type} is accepted or not\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param type          {@link DeclaredType type}\n-     * @return <code>true</code> if accepted\n-     */\n-    boolean accept(ProcessingEnvironment processingEnv, DeclaredType type);\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.metadata.annotation.processing.builder;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.type.DeclaredType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofDeclaredType;\r\n+\r\n+/**\r\n+ * An interface of {@link TypeDefinitionBuilder} for {@link DeclaredType}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface DeclaredTypeDefinitionBuilder extends TypeDefinitionBuilder<DeclaredType> {\r\n+\r\n+    @Override\r\n+    default boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        if (declaredType == null) {\r\n+            return false;\r\n+        }\r\n+        return accept(processingEnv, declaredType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Test the specified {@link DeclaredType type} is accepted or not\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param type          {@link DeclaredType type}\r\n+     * @return <code>true</code> if accepted\r\n+     */\r\n+    boolean accept(ProcessingEnvironment processingEnv, DeclaredType type);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/EnumTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/EnumTypeDefinitionBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,55 +1,55 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.annotation.processing.util.FieldUtils;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.Name;\n-import javax.lang.model.type.DeclaredType;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.FieldUtils.getDeclaredFields;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isEnumType;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for Java {@link Enum}\n- *\n- * @since 2.7.6\n- */\n-public class EnumTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\n-        return isEnumType(type);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\n-        getDeclaredFields(type, FieldUtils::isEnumMemberField)\n-                .stream()\n-                .map(Element::getSimpleName)\n-                .map(Name::toString)\n-                .forEach(typeDefinition.getEnums()::add);\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 2;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.util.FieldUtils;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.Name;\r\n+import javax.lang.model.type.DeclaredType;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.FieldUtils.getDeclaredFields;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isEnumType;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for Java {@link Enum}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class EnumTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\r\n+        return isEnumType(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\r\n+        getDeclaredFields(type, FieldUtils::isEnumMemberField)\r\n+                .stream()\r\n+                .map(Element::getSimpleName)\r\n+                .map(Name::toString)\r\n+                .forEach(typeDefinition.getEnums()::add);\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 2;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/GeneralTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/GeneralTypeDefinitionBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,65 +1,65 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.type.DeclaredType;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.FieldUtils.getNonStaticFields;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getType;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isClassType;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for General Object\n- *\n- * @since 2.7.6\n- */\n-public class GeneralTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\n-        return isClassType(type);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\n-\n-        String typeName = type.toString();\n-\n-        TypeElement typeElement = getType(processingEnv, typeName);\n-\n-        buildProperties(processingEnv, typeElement, typeDefinition);\n-    }\n-\n-    protected void buildProperties(ProcessingEnvironment processingEnv, TypeElement type, TypeDefinition definition) {\n-        getNonStaticFields(type).forEach(field -> {\n-            String fieldName = field.getSimpleName().toString();\n-            TypeDefinition propertyType = TypeDefinitionBuilder.build(processingEnv, field);\n-            if (propertyType != null) {\n-                definition.getProperties().put(fieldName, propertyType);\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.type.DeclaredType;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.FieldUtils.getNonStaticFields;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getType;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isClassType;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for General Object\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class GeneralTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\r\n+        return isClassType(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\r\n+\r\n+        String typeName = type.toString();\r\n+\r\n+        TypeElement typeElement = getType(processingEnv, typeName);\r\n+\r\n+        buildProperties(processingEnv, typeElement, typeDefinition);\r\n+    }\r\n+\r\n+    protected void buildProperties(ProcessingEnvironment processingEnv, TypeElement type, TypeDefinition definition) {\r\n+        getNonStaticFields(type).forEach(field -> {\r\n+            String fieldName = field.getSimpleName().toString();\r\n+            TypeDefinition propertyType = TypeDefinitionBuilder.build(processingEnv, field);\r\n+            if (propertyType != null) {\r\n+                definition.getProperties().put(fieldName, propertyType);\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/MapTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/MapTypeDefinitionBuilder.java", "comments": ["Ordering 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-package org.apache.dubbo.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.type.DeclaredType;\n-import javax.lang.model.type.TypeMirror;\n-import javax.lang.model.util.Elements;\n-import javax.lang.model.util.Types;\n-import java.util.Map;\n-import java.util.Objects;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for Java {@link Map}\n- *\n- * @since 2.7.6\n- */\n-public class MapTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\n-        Elements elements = processingEnv.getElementUtils();\n-        TypeElement mapTypeElement = elements.getTypeElement(Map.class.getTypeName());\n-        TypeMirror mapType = mapTypeElement.asType();\n-        Types types = processingEnv.getTypeUtils();\n-        TypeMirror erasedType = types.erasure(type);\n-        return types.isAssignable(erasedType, mapType);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\n-        // Generic Type arguments\n-        type.getTypeArguments()\n-                .stream()\n-                .map(typeArgument -> TypeDefinitionBuilder.build(processingEnv, typeArgument)) // build the TypeDefinition from typeArgument\n-                .filter(Objects::nonNull)\n-                .forEach(typeDefinition.getItems()::add);                              // Add into the declared TypeDefinition\n-\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 6;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.type.DeclaredType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import javax.lang.model.util.Elements;\r\n+import javax.lang.model.util.Types;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for Java {@link Map}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class MapTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\r\n+        Elements elements = processingEnv.getElementUtils();\r\n+        TypeElement mapTypeElement = elements.getTypeElement(Map.class.getTypeName());\r\n+        TypeMirror mapType = mapTypeElement.asType();\r\n+        Types types = processingEnv.getTypeUtils();\r\n+        TypeMirror erasedType = types.erasure(type);\r\n+        return types.isAssignable(erasedType, mapType);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\r\n+        // Generic Type arguments\r\n+        type.getTypeArguments()\r\n+                .stream()\r\n+                .map(typeArgument -> TypeDefinitionBuilder.build(processingEnv, typeArgument)) // build the TypeDefinition from typeArgument\r\n+                .filter(Objects::nonNull)\r\n+                .forEach(typeDefinition.getItems()::add);                              // Add into the declared TypeDefinition\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 6;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/MethodDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/MethodDefinitionBuilder.java", "comments": ["Ordering 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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.ExecutableElement;\n-import java.util.List;\n-import java.util.stream.Collectors;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getMethodName;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getMethodParameterTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getReturnType;\n-\n-/**\n- * A Builder class for {@link MethodDefinition}\n- *\n- * @see MethodDefinition\n- * @since 2.7.6\n- */\n-public interface MethodDefinitionBuilder {\n-\n-    static MethodDefinition build(ProcessingEnvironment processingEnv, ExecutableElement method) {\n-        MethodDefinition methodDefinition = new MethodDefinition();\n-        methodDefinition.setName(getMethodName(method));\n-        methodDefinition.setReturnType(getReturnType(method));\n-        methodDefinition.setParameterTypes(getMethodParameterTypes(method));\n-        methodDefinition.setParameters(getMethodParameters(processingEnv, method));\n-        return methodDefinition;\n-    }\n-\n-    static List<TypeDefinition> getMethodParameters(ProcessingEnvironment processingEnv, ExecutableElement method) {\n-        return method.getParameters().stream()\n-                .map(element -> TypeDefinitionBuilder.build(processingEnv, element))\n-                .collect(Collectors.toList());\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import java.util.List;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getMethodName;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getMethodParameterTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getReturnType;\r\n+\r\n+/**\r\n+ * A Builder class for {@link MethodDefinition}\r\n+ *\r\n+ * @see MethodDefinition\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface MethodDefinitionBuilder {\r\n+\r\n+    static MethodDefinition build(ProcessingEnvironment processingEnv, ExecutableElement method) {\r\n+        MethodDefinition methodDefinition = new MethodDefinition();\r\n+        methodDefinition.setName(getMethodName(method));\r\n+        methodDefinition.setReturnType(getReturnType(method));\r\n+        methodDefinition.setParameterTypes(getMethodParameterTypes(method));\r\n+        methodDefinition.setParameters(getMethodParameters(processingEnv, method));\r\n+        return methodDefinition;\r\n+    }\r\n+\r\n+    static List<TypeDefinition> getMethodParameters(ProcessingEnvironment processingEnv, ExecutableElement method) {\r\n+        return method.getParameters().stream()\r\n+                .map(element -> TypeDefinitionBuilder.build(processingEnv, element))\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/PrimitiveTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/PrimitiveTypeDefinitionBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,48 +1,48 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.type.PrimitiveType;\n-import javax.lang.model.type.TypeMirror;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isPrimitiveType;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for Java {@link PrimitiveType primitve type}\n- *\n- * @since 2.7.6\n- */\n-public class PrimitiveTypeDefinitionBuilder implements TypeDefinitionBuilder<PrimitiveType> {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        return isPrimitiveType(type);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, PrimitiveType type, TypeDefinition typeDefinition) {\n-        // DO NOTHING\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 3;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.type.PrimitiveType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isPrimitiveType;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for Java {@link PrimitiveType primitve type}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class PrimitiveTypeDefinitionBuilder implements TypeDefinitionBuilder<PrimitiveType> {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        return isPrimitiveType(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, PrimitiveType type, TypeDefinition typeDefinition) {\r\n+        // DO NOTHING\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 3;\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/ServiceDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/ServiceDefinitionBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,56 +1,56 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.TypeElement;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getPublicNonStaticMethods;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getResourceName;\n-\n-/**\n- * A Builder for {@link ServiceDefinition}\n- *\n- * @see ServiceDefinition\n- * @since 2.7.6\n- */\n-public interface ServiceDefinitionBuilder {\n-\n-    static ServiceDefinition build(ProcessingEnvironment processingEnv, TypeElement type) {\n-        ServiceDefinition serviceDefinition = new ServiceDefinition();\n-        serviceDefinition.setCanonicalName(type.toString());\n-        serviceDefinition.setCodeSource(getResourceName(type.toString()));\n-\n-        // Get all super types and interface excluding the specified type\n-        // and then the result will be added into ServiceDefinition#getTypes()\n-        getHierarchicalTypes(type.asType(), Object.class)\n-                .stream()\n-                .map(t -> TypeDefinitionBuilder.build(processingEnv, t))\n-                .forEach(serviceDefinition.getTypes()::add);\n-\n-        // Get all declared methods that will be added into ServiceDefinition#getMethods()\n-        getPublicNonStaticMethods(type, Object.class)\n-                .stream()\n-                .map(method -> MethodDefinitionBuilder.build(processingEnv, method))\n-                .forEach(serviceDefinition.getMethods()::add);\n-\n-        return serviceDefinition;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getPublicNonStaticMethods;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getResourceName;\r\n+\r\n+/**\r\n+ * A Builder for {@link ServiceDefinition}\r\n+ *\r\n+ * @see ServiceDefinition\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface ServiceDefinitionBuilder {\r\n+\r\n+    static ServiceDefinition build(ProcessingEnvironment processingEnv, TypeElement type) {\r\n+        ServiceDefinition serviceDefinition = new ServiceDefinition();\r\n+        serviceDefinition.setCanonicalName(type.toString());\r\n+        serviceDefinition.setCodeSource(getResourceName(type.toString()));\r\n+\r\n+        // Get all super types and interface excluding the specified type\r\n+        // and then the result will be added into ServiceDefinition#getTypes()\r\n+        getHierarchicalTypes(type.asType(), Object.class)\r\n+                .stream()\r\n+                .map(t -> TypeDefinitionBuilder.build(processingEnv, t))\r\n+                .forEach(serviceDefinition.getTypes()::add);\r\n+\r\n+        // Get all declared methods that will be added into ServiceDefinition#getMethods()\r\n+        getPublicNonStaticMethods(type, Object.class)\r\n+                .stream()\r\n+                .map(method -> MethodDefinitionBuilder.build(processingEnv, method))\r\n+                .forEach(serviceDefinition.getMethods()::add);\r\n+\r\n+        return serviceDefinition;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/SimpleTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/SimpleTypeDefinitionBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,49 +1,49 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.annotation.processing.util.TypeUtils;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.type.DeclaredType;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isSimpleType;\n-\n-\n-/**\n- * {@link TypeDefinitionBuilder} for {@link TypeUtils#SIMPLE_TYPES Java Simple Type}\n- *\n- * @since 2.7.6\n- */\n-public class SimpleTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\n-        return isSimpleType(type);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\n-        //  DO NOTHING\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 1;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.util.TypeUtils;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.type.DeclaredType;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isSimpleType;\r\n+\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for {@link TypeUtils#SIMPLE_TYPES Java Simple Type}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class SimpleTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\r\n+        return isSimpleType(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\r\n+        //  DO NOTHING\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 1;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/TypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/TypeDefinitionBuilder.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,96 +1,96 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.type.TypeMirror;\n-\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-\n-/**\n- * A class builds the instance of {@link TypeDefinition}\n- *\n- * @since 2.7.6\n- */\n-@SPI\n-public interface TypeDefinitionBuilder<T extends TypeMirror> extends Prioritized {\n-\n-    /**\n-     * Test the specified {@link TypeMirror type} is accepted or not\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param type          {@link TypeMirror type}\n-     * @return <code>true</code> if accepted\n-     */\n-    boolean accept(ProcessingEnvironment processingEnv, TypeMirror type);\n-\n-    /**\n-     * Build the instance of {@link TypeDefinition}\n-     *\n-     * @param processingEnv  {@link ProcessingEnvironment}\n-     * @param type           {@link T type}\n-     * @param typeDefinition {@link TypeDefinition} to be built\n-     * @return an instance of {@link TypeDefinition}\n-     */\n-    void build(ProcessingEnvironment processingEnv, T type, TypeDefinition typeDefinition);\n-\n-    /**\n-     * Build the instance of {@link TypeDefinition} from the specified {@link Element element}\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param element       {@link Element source element}\n-     * @return non-null\n-     */\n-    static TypeDefinition build(ProcessingEnvironment processingEnv, Element element) {\n-        TypeDefinition typeDefinition = build(processingEnv, element.asType());\n-        // Comment this code for the compatibility\n-        // typeDefinition.set$ref(element.toString());\n-        return typeDefinition;\n-    }\n-\n-    /**\n-     * Build the instance of {@link TypeDefinition} from the specified {@link TypeMirror type}\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param type          {@link TypeMirror type}\n-     * @return non-null\n-     */\n-    static TypeDefinition build(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        String typeName = type.toString();\n-        TypeDefinition typeDefinition = new TypeDefinition(typeName);\n-\n-        // Build by all instances of TypeDefinitionBuilder that were loaded By Java SPI\n-\n-        getExtensionLoader(TypeDefinitionBuilder.class)\n-                .getSupportedExtensionInstances()\n-                .stream()\n-//        load(TypeDefinitionBuilder.class, TypeDefinitionBuilder.class.getClassLoader())\n-                .filter(builder -> builder.accept(processingEnv, type))\n-                .findFirst()\n-                .ifPresent(builder -> {\n-                    builder.build(processingEnv, type, typeDefinition);\n-                    // typeDefinition.setTypeBuilderName(builder.getClass().getName());\n-                });\n-\n-        return typeDefinition;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.type.TypeMirror;\r\n+\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+\r\n+/**\r\n+ * A class builds the instance of {@link TypeDefinition}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI\r\n+public interface TypeDefinitionBuilder<T extends TypeMirror> extends Prioritized {\r\n+\r\n+    /**\r\n+     * Test the specified {@link TypeMirror type} is accepted or not\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param type          {@link TypeMirror type}\r\n+     * @return <code>true</code> if accepted\r\n+     */\r\n+    boolean accept(ProcessingEnvironment processingEnv, TypeMirror type);\r\n+\r\n+    /**\r\n+     * Build the instance of {@link TypeDefinition}\r\n+     *\r\n+     * @param processingEnv  {@link ProcessingEnvironment}\r\n+     * @param type           {@link T type}\r\n+     * @param typeDefinition {@link TypeDefinition} to be built\r\n+     * @return an instance of {@link TypeDefinition}\r\n+     */\r\n+    void build(ProcessingEnvironment processingEnv, T type, TypeDefinition typeDefinition);\r\n+\r\n+    /**\r\n+     * Build the instance of {@link TypeDefinition} from the specified {@link Element element}\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param element       {@link Element source element}\r\n+     * @return non-null\r\n+     */\r\n+    static TypeDefinition build(ProcessingEnvironment processingEnv, Element element) {\r\n+        TypeDefinition typeDefinition = build(processingEnv, element.asType());\r\n+        // Comment this code for the compatibility\r\n+        // typeDefinition.set$ref(element.toString());\r\n+        return typeDefinition;\r\n+    }\r\n+\r\n+    /**\r\n+     * Build the instance of {@link TypeDefinition} from the specified {@link TypeMirror type}\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param type          {@link TypeMirror type}\r\n+     * @return non-null\r\n+     */\r\n+    static TypeDefinition build(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        String typeName = type.toString();\r\n+        TypeDefinition typeDefinition = new TypeDefinition(typeName);\r\n+\r\n+        // Build by all instances of TypeDefinitionBuilder that were loaded By Java SPI\r\n+\r\n+        getExtensionLoader(TypeDefinitionBuilder.class)\r\n+                .getSupportedExtensionInstances()\r\n+                .stream()\r\n+//        load(TypeDefinitionBuilder.class, TypeDefinitionBuilder.class.getClassLoader())\r\n+                .filter(builder -> builder.accept(processingEnv, type))\r\n+                .findFirst()\r\n+                .ifPresent(builder -> {\r\n+                    builder.build(processingEnv, type, typeDefinition);\r\n+                    // typeDefinition.setTypeBuilderName(builder.getClass().getName());\r\n+                });\r\n+\r\n+        return typeDefinition;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/AbstractAnnotatedMethodParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/AbstractAnnotatedMethodParameterProcessor.java", "comments": ["Ordering 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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getValue;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation\n- *\n- * @since 2.7.6\n- */\n-public abstract class AbstractAnnotatedMethodParameterProcessor implements AnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public final void process(AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        String annotationValue = getAnnotationValue(annotation, parameter, parameterIndex);\n-        String defaultValue = getDefaultValue(annotation, parameter, parameterIndex);\n-        process(annotationValue, defaultValue, annotation, parameter, parameterIndex, method, restMethodMetadata);\n-    }\n-\n-    protected abstract void process(String annotationValue, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex,\n-                                    ExecutableElement method, RestMethodMetadata restMethodMetadata);\n-\n-    protected String getAnnotationValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\n-        return getValue(annotation);\n-    }\n-\n-    protected String getDefaultValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\n-        return buildDefaultValue(parameterIndex);\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getValue;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class AbstractAnnotatedMethodParameterProcessor implements AnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public final void process(AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        String annotationValue = getAnnotationValue(annotation, parameter, parameterIndex);\r\n+        String defaultValue = getDefaultValue(annotation, parameter, parameterIndex);\r\n+        process(annotationValue, defaultValue, annotation, parameter, parameterIndex, method, restMethodMetadata);\r\n+    }\r\n+\r\n+    protected abstract void process(String annotationValue, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex,\r\n+                                    ExecutableElement method, RestMethodMetadata restMethodMetadata);\r\n+\r\n+    protected String getAnnotationValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\r\n+        return getValue(annotation);\r\n+    }\r\n+\r\n+    protected String getDefaultValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\r\n+        return buildDefaultValue(parameterIndex);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/AbstractServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/AbstractServiceRestMetadataResolver.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,291 +1,291 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.metadata.annotation.processing.util.ExecutableElementComparator;\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.element.VariableElement;\n-import javax.lang.model.util.Elements;\n-import java.util.HashMap;\n-import java.util.LinkedHashMap;\n-import java.util.LinkedHashSet;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Optional;\n-import java.util.Set;\n-import java.util.function.Function;\n-import java.util.stream.Collectors;\n-\n-import static java.lang.ThreadLocal.withInitial;\n-import static java.util.Collections.emptyList;\n-import static java.util.Collections.sort;\n-import static java.util.Optional.empty;\n-import static java.util.Optional.of;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-import static org.apache.dubbo.metadata.annotation.processing.builder.MethodDefinitionBuilder.build;\n-import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.info;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getOverrideMethod;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getPublicNonStaticMethods;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getGroup;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getVersion;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.resolveServiceInterfaceName;\n-\n-/**\n- * Abstract {@link ServiceRestMetadataResolver} implementation\n- *\n- * @since 2.7.6\n- */\n-public abstract class AbstractServiceRestMetadataResolver implements ServiceRestMetadataResolver {\n-\n-    private final static ThreadLocal<Map<String, Object>> threadLocalCache = withInitial(HashMap::new);\n-\n-    private final static Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = loadAnnotatedMethodParameterProcessors();\n-\n-    private final String processorName = getClass().getSimpleName();\n-\n-    @Override\n-    public final ServiceRestMetadata resolve(ProcessingEnvironment processingEnv,\n-                                             TypeElement serviceType,\n-                                             Set<? extends TypeElement> annotations) {\n-\n-        info(\"%s is processing the service type[%s] with annotations[%s]\", processorName, serviceType,\n-                annotations.stream().map(t -> \"@\" + t.toString()).collect(Collectors.joining(\",\")));\n-\n-        ServiceRestMetadata serviceRestMetadata = new ServiceRestMetadata();\n-\n-        Elements elements = processingEnv.getElementUtils();\n-\n-        try {\n-            AnnotationMirror serviceAnnotation = getAnnotation(serviceType);\n-            String serviceInterfaceName = resolveServiceInterfaceName(serviceType, serviceAnnotation);\n-            serviceRestMetadata.setServiceInterface(serviceInterfaceName);\n-            serviceRestMetadata.setGroup(getGroup(serviceAnnotation));\n-            serviceRestMetadata.setVersion(getVersion(serviceAnnotation));\n-\n-            TypeElement serviceInterfaceType = elements.getTypeElement(serviceInterfaceName);\n-\n-            List<? extends ExecutableElement> serviceMethods = new LinkedList<>(getPublicNonStaticMethods(serviceInterfaceType, Object.class));\n-\n-            // Sorts\n-            sort(serviceMethods, ExecutableElementComparator.INSTANCE);\n-\n-            serviceMethods.forEach(serviceMethod -> {\n-                resolveRestMethodMetadata(processingEnv, serviceType, serviceInterfaceType, serviceMethod)\n-                        .ifPresent(serviceRestMetadata.getMeta()::add);\n-            });\n-\n-        } finally {\n-            clearCache();\n-        }\n-\n-        info(\"The %s's process result : %s\", processorName, serviceRestMetadata);\n-\n-        return serviceRestMetadata;\n-    }\n-\n-    protected Optional<RestMethodMetadata> resolveRestMethodMetadata(ProcessingEnvironment processingEnv,\n-                                                                     TypeElement serviceType,\n-                                                                     TypeElement serviceInterfaceType,\n-                                                                     ExecutableElement serviceMethod) {\n-\n-        ExecutableElement restCapableMethod = findRestCapableMethod(processingEnv, serviceType, serviceInterfaceType, serviceMethod);\n-\n-        if (restCapableMethod == null) { // if can't be found\n-            return empty();\n-        }\n-\n-        String requestPath = resolveRequestPath(processingEnv, serviceType, restCapableMethod); // requestPath is required\n-\n-        if (requestPath == null) {\n-            return empty();\n-        }\n-\n-        String requestMethod = resolveRequestMethod(processingEnv, serviceType, restCapableMethod); // requestMethod is required\n-\n-        if (requestMethod == null) {\n-            return empty();\n-        }\n-\n-        RestMethodMetadata metadata = new RestMethodMetadata();\n-\n-        MethodDefinition methodDefinition = resolveMethodDefinition(processingEnv, serviceType, restCapableMethod);\n-        // Set MethodDefinition\n-        metadata.setMethod(methodDefinition);\n-\n-        // process the annotated method parameters\n-        processAnnotatedMethodParameters(restCapableMethod, serviceType, metadata);\n-\n-        // process produces\n-        Set<String> produces = new LinkedHashSet<>();\n-        processProduces(processingEnv, serviceType, restCapableMethod, produces);\n-\n-        // process consumes\n-        Set<String> consumes = new LinkedHashSet<>();\n-        processConsumes(processingEnv, serviceType, restCapableMethod, consumes);\n-\n-        // Initialize RequestMetadata\n-        RequestMetadata request = metadata.getRequest();\n-        request.setPath(requestPath);\n-        request.setMethod(requestMethod);\n-        request.setProduces(produces);\n-        request.setConsumes(consumes);\n-\n-        // Post-Process\n-        postProcessRestMethodMetadata(processingEnv, serviceType, serviceMethod, metadata);\n-\n-        return of(metadata);\n-    }\n-\n-    /**\n-     * Find the method with the capable for REST from the specified service method and its override method\n-     *\n-     * @param processingEnv        {@link ProcessingEnvironment}\n-     * @param serviceType\n-     * @param serviceInterfaceType\n-     * @param serviceMethod\n-     * @return <code>null</code> if can't be found\n-     */\n-    private ExecutableElement findRestCapableMethod(ProcessingEnvironment processingEnv,\n-                                                    TypeElement serviceType,\n-                                                    TypeElement serviceInterfaceType,\n-                                                    ExecutableElement serviceMethod) {\n-        // try to judge the override first\n-        ExecutableElement overrideMethod = getOverrideMethod(processingEnv, serviceType, serviceMethod);\n-        if (supports(processingEnv, serviceType, serviceInterfaceType, overrideMethod)) {\n-            return overrideMethod;\n-        }\n-        // or, try to judge the declared method\n-        return supports(processingEnv, serviceType, serviceInterfaceType, serviceMethod) ? serviceMethod : null;\n-    }\n-\n-    /**\n-     * Does the specified method support REST or not ?\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param method        the method may be declared on the interface or class\n-     * @return if supports, return <code>true</code>, or <code>false</code>\n-     */\n-    protected abstract boolean supports(ProcessingEnvironment processingEnv,\n-                                        TypeElement serviceType,\n-                                        TypeElement serviceInterfaceType,\n-                                        ExecutableElement method);\n-\n-\n-    /**\n-     * Post-Process for {@link RestMethodMetadata}, sub-type could override this method for further works\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param serviceType   The type that @Service annotated\n-     * @param method        The public method of <code>serviceType</code>\n-     * @param metadata      {@link RestMethodMetadata} maybe updated\n-     */\n-    protected void postProcessRestMethodMetadata(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                                 ExecutableElement method, RestMethodMetadata metadata) {\n-    }\n-\n-    protected abstract String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                                 ExecutableElement method);\n-\n-    protected abstract String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                                   ExecutableElement method);\n-\n-    protected MethodDefinition resolveMethodDefinition(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                                       ExecutableElement method) {\n-        return build(processingEnv, method);\n-    }\n-\n-    protected void processAnnotatedMethodParameters(ExecutableElement method, TypeElement type,\n-                                                    RestMethodMetadata metadata) {\n-        List<? extends VariableElement> methodParameters = method.getParameters();\n-        int size = methodParameters.size();\n-        for (int i = 0; i < size; i++) {\n-            VariableElement parameter = methodParameters.get(i);\n-            // Add indexed parameter name\n-            metadata.addIndexToName(i, parameter.getSimpleName().toString());\n-            processAnnotatedMethodParameter(parameter, i, method, type, metadata);\n-        }\n-    }\n-\n-    protected void processAnnotatedMethodParameter(VariableElement parameter, int parameterIndex,\n-                                                   ExecutableElement method, TypeElement serviceType,\n-                                                   RestMethodMetadata metadata) {\n-\n-        parameter.getAnnotationMirrors().forEach(annotation -> {\n-            String annotationType = annotation.getAnnotationType().toString();\n-            parameterProcessorsMap.getOrDefault(annotationType, emptyList())\n-                    .forEach(parameterProcessor -> {\n-                        parameterProcessor.process(annotation, parameter, parameterIndex, method, metadata);\n-                    });\n-        });\n-    }\n-\n-    protected abstract void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                            ExecutableElement method, Set<String> produces);\n-\n-    protected abstract void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                            ExecutableElement method, Set<String> consumes);\n-\n-    protected static final void put(String name, Object value) {\n-        Map<String, Object> cache = getCache();\n-        cache.put(name, value);\n-    }\n-\n-    protected static final <T> T get(String name) throws ClassCastException {\n-        Map<String, Object> cache = getCache();\n-        return (T) cache.get(name);\n-    }\n-\n-    protected static final <V> V computeIfAbsent(String name, Function<? super String, ? extends V> mappingFunction) {\n-        return (V) getCache().computeIfAbsent(name, mappingFunction);\n-    }\n-\n-    private static Map<String, List<AnnotatedMethodParameterProcessor>> loadAnnotatedMethodParameterProcessors() {\n-        Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = new LinkedHashMap<>();\n-\n-//        load(AnnotatedMethodParameterProcessor.class, AnnotatedMethodParameterProcessor.class.getClassLoader())\n-\n-        getExtensionLoader(AnnotatedMethodParameterProcessor.class)\n-                .getSupportedExtensionInstances()\n-                .forEach(processor -> {\n-                    List<AnnotatedMethodParameterProcessor> processors =\n-                            parameterProcessorsMap.computeIfAbsent(processor.getAnnotationType(), k -> new LinkedList<>());\n-                    processors.add(processor);\n-                });\n-\n-        return parameterProcessorsMap;\n-    }\n-\n-    private static Map<String, Object> getCache() {\n-        return threadLocalCache.get();\n-    }\n-\n-    private static void clearCache() {\n-        Map<String, Object> cache = getCache();\n-        cache.clear();\n-        threadLocalCache.remove();\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.util.ExecutableElementComparator;\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import javax.lang.model.util.Elements;\r\n+import java.util.HashMap;\r\n+import java.util.LinkedHashMap;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Optional;\r\n+import java.util.Set;\r\n+import java.util.function.Function;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.lang.ThreadLocal.withInitial;\r\n+import static java.util.Collections.emptyList;\r\n+import static java.util.Collections.sort;\r\n+import static java.util.Optional.empty;\r\n+import static java.util.Optional.of;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+import static org.apache.dubbo.metadata.annotation.processing.builder.MethodDefinitionBuilder.build;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.info;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getOverrideMethod;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getPublicNonStaticMethods;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getGroup;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getVersion;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.resolveServiceInterfaceName;\r\n+\r\n+/**\r\n+ * Abstract {@link ServiceRestMetadataResolver} implementation\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class AbstractServiceRestMetadataResolver implements ServiceRestMetadataResolver {\r\n+\r\n+    private final static ThreadLocal<Map<String, Object>> threadLocalCache = withInitial(HashMap::new);\r\n+\r\n+    private final static Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = loadAnnotatedMethodParameterProcessors();\r\n+\r\n+    private final String processorName = getClass().getSimpleName();\r\n+\r\n+    @Override\r\n+    public final ServiceRestMetadata resolve(ProcessingEnvironment processingEnv,\r\n+                                             TypeElement serviceType,\r\n+                                             Set<? extends TypeElement> annotations) {\r\n+\r\n+        info(\"%s is processing the service type[%s] with annotations[%s]\", processorName, serviceType,\r\n+                annotations.stream().map(t -> \"@\" + t.toString()).collect(Collectors.joining(\",\")));\r\n+\r\n+        ServiceRestMetadata serviceRestMetadata = new ServiceRestMetadata();\r\n+\r\n+        Elements elements = processingEnv.getElementUtils();\r\n+\r\n+        try {\r\n+            AnnotationMirror serviceAnnotation = getAnnotation(serviceType);\r\n+            String serviceInterfaceName = resolveServiceInterfaceName(serviceType, serviceAnnotation);\r\n+            serviceRestMetadata.setServiceInterface(serviceInterfaceName);\r\n+            serviceRestMetadata.setGroup(getGroup(serviceAnnotation));\r\n+            serviceRestMetadata.setVersion(getVersion(serviceAnnotation));\r\n+\r\n+            TypeElement serviceInterfaceType = elements.getTypeElement(serviceInterfaceName);\r\n+\r\n+            List<? extends ExecutableElement> serviceMethods = new LinkedList<>(getPublicNonStaticMethods(serviceInterfaceType, Object.class));\r\n+\r\n+            // Sorts\r\n+            sort(serviceMethods, ExecutableElementComparator.INSTANCE);\r\n+\r\n+            serviceMethods.forEach(serviceMethod -> {\r\n+                resolveRestMethodMetadata(processingEnv, serviceType, serviceInterfaceType, serviceMethod)\r\n+                        .ifPresent(serviceRestMetadata.getMeta()::add);\r\n+            });\r\n+\r\n+        } finally {\r\n+            clearCache();\r\n+        }\r\n+\r\n+        info(\"The %s's process result : %s\", processorName, serviceRestMetadata);\r\n+\r\n+        return serviceRestMetadata;\r\n+    }\r\n+\r\n+    protected Optional<RestMethodMetadata> resolveRestMethodMetadata(ProcessingEnvironment processingEnv,\r\n+                                                                     TypeElement serviceType,\r\n+                                                                     TypeElement serviceInterfaceType,\r\n+                                                                     ExecutableElement serviceMethod) {\r\n+\r\n+        ExecutableElement restCapableMethod = findRestCapableMethod(processingEnv, serviceType, serviceInterfaceType, serviceMethod);\r\n+\r\n+        if (restCapableMethod == null) { // if can't be found\r\n+            return empty();\r\n+        }\r\n+\r\n+        String requestPath = resolveRequestPath(processingEnv, serviceType, restCapableMethod); // requestPath is required\r\n+\r\n+        if (requestPath == null) {\r\n+            return empty();\r\n+        }\r\n+\r\n+        String requestMethod = resolveRequestMethod(processingEnv, serviceType, restCapableMethod); // requestMethod is required\r\n+\r\n+        if (requestMethod == null) {\r\n+            return empty();\r\n+        }\r\n+\r\n+        RestMethodMetadata metadata = new RestMethodMetadata();\r\n+\r\n+        MethodDefinition methodDefinition = resolveMethodDefinition(processingEnv, serviceType, restCapableMethod);\r\n+        // Set MethodDefinition\r\n+        metadata.setMethod(methodDefinition);\r\n+\r\n+        // process the annotated method parameters\r\n+        processAnnotatedMethodParameters(restCapableMethod, serviceType, metadata);\r\n+\r\n+        // process produces\r\n+        Set<String> produces = new LinkedHashSet<>();\r\n+        processProduces(processingEnv, serviceType, restCapableMethod, produces);\r\n+\r\n+        // process consumes\r\n+        Set<String> consumes = new LinkedHashSet<>();\r\n+        processConsumes(processingEnv, serviceType, restCapableMethod, consumes);\r\n+\r\n+        // Initialize RequestMetadata\r\n+        RequestMetadata request = metadata.getRequest();\r\n+        request.setPath(requestPath);\r\n+        request.setMethod(requestMethod);\r\n+        request.setProduces(produces);\r\n+        request.setConsumes(consumes);\r\n+\r\n+        // Post-Process\r\n+        postProcessRestMethodMetadata(processingEnv, serviceType, serviceMethod, metadata);\r\n+\r\n+        return of(metadata);\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the method with the capable for REST from the specified service method and its override method\r\n+     *\r\n+     * @param processingEnv        {@link ProcessingEnvironment}\r\n+     * @param serviceType\r\n+     * @param serviceInterfaceType\r\n+     * @param serviceMethod\r\n+     * @return <code>null</code> if can't be found\r\n+     */\r\n+    private ExecutableElement findRestCapableMethod(ProcessingEnvironment processingEnv,\r\n+                                                    TypeElement serviceType,\r\n+                                                    TypeElement serviceInterfaceType,\r\n+                                                    ExecutableElement serviceMethod) {\r\n+        // try to judge the override first\r\n+        ExecutableElement overrideMethod = getOverrideMethod(processingEnv, serviceType, serviceMethod);\r\n+        if (supports(processingEnv, serviceType, serviceInterfaceType, overrideMethod)) {\r\n+            return overrideMethod;\r\n+        }\r\n+        // or, try to judge the declared method\r\n+        return supports(processingEnv, serviceType, serviceInterfaceType, serviceMethod) ? serviceMethod : null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Does the specified method support REST or not ?\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param method        the method may be declared on the interface or class\r\n+     * @return if supports, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    protected abstract boolean supports(ProcessingEnvironment processingEnv,\r\n+                                        TypeElement serviceType,\r\n+                                        TypeElement serviceInterfaceType,\r\n+                                        ExecutableElement method);\r\n+\r\n+\r\n+    /**\r\n+     * Post-Process for {@link RestMethodMetadata}, sub-type could override this method for further works\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param serviceType   The type that @Service annotated\r\n+     * @param method        The public method of <code>serviceType</code>\r\n+     * @param metadata      {@link RestMethodMetadata} maybe updated\r\n+     */\r\n+    protected void postProcessRestMethodMetadata(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                                 ExecutableElement method, RestMethodMetadata metadata) {\r\n+    }\r\n+\r\n+    protected abstract String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                                 ExecutableElement method);\r\n+\r\n+    protected abstract String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                                   ExecutableElement method);\r\n+\r\n+    protected MethodDefinition resolveMethodDefinition(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                                       ExecutableElement method) {\r\n+        return build(processingEnv, method);\r\n+    }\r\n+\r\n+    protected void processAnnotatedMethodParameters(ExecutableElement method, TypeElement type,\r\n+                                                    RestMethodMetadata metadata) {\r\n+        List<? extends VariableElement> methodParameters = method.getParameters();\r\n+        int size = methodParameters.size();\r\n+        for (int i = 0; i < size; i++) {\r\n+            VariableElement parameter = methodParameters.get(i);\r\n+            // Add indexed parameter name\r\n+            metadata.addIndexToName(i, parameter.getSimpleName().toString());\r\n+            processAnnotatedMethodParameter(parameter, i, method, type, metadata);\r\n+        }\r\n+    }\r\n+\r\n+    protected void processAnnotatedMethodParameter(VariableElement parameter, int parameterIndex,\r\n+                                                   ExecutableElement method, TypeElement serviceType,\r\n+                                                   RestMethodMetadata metadata) {\r\n+\r\n+        parameter.getAnnotationMirrors().forEach(annotation -> {\r\n+            String annotationType = annotation.getAnnotationType().toString();\r\n+            parameterProcessorsMap.getOrDefault(annotationType, emptyList())\r\n+                    .forEach(parameterProcessor -> {\r\n+                        parameterProcessor.process(annotation, parameter, parameterIndex, method, metadata);\r\n+                    });\r\n+        });\r\n+    }\r\n+\r\n+    protected abstract void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                            ExecutableElement method, Set<String> produces);\r\n+\r\n+    protected abstract void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                            ExecutableElement method, Set<String> consumes);\r\n+\r\n+    protected static final void put(String name, Object value) {\r\n+        Map<String, Object> cache = getCache();\r\n+        cache.put(name, value);\r\n+    }\r\n+\r\n+    protected static final <T> T get(String name) throws ClassCastException {\r\n+        Map<String, Object> cache = getCache();\r\n+        return (T) cache.get(name);\r\n+    }\r\n+\r\n+    protected static final <V> V computeIfAbsent(String name, Function<? super String, ? extends V> mappingFunction) {\r\n+        return (V) getCache().computeIfAbsent(name, mappingFunction);\r\n+    }\r\n+\r\n+    private static Map<String, List<AnnotatedMethodParameterProcessor>> loadAnnotatedMethodParameterProcessors() {\r\n+        Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = new LinkedHashMap<>();\r\n+\r\n+//        load(AnnotatedMethodParameterProcessor.class, AnnotatedMethodParameterProcessor.class.getClassLoader())\r\n+\r\n+        getExtensionLoader(AnnotatedMethodParameterProcessor.class)\r\n+                .getSupportedExtensionInstances()\r\n+                .forEach(processor -> {\r\n+                    List<AnnotatedMethodParameterProcessor> processors =\r\n+                            parameterProcessorsMap.computeIfAbsent(processor.getAnnotationType(), k -> new LinkedList<>());\r\n+                    processors.add(processor);\r\n+                });\r\n+\r\n+        return parameterProcessorsMap;\r\n+    }\r\n+\r\n+    private static Map<String, Object> getCache() {\r\n+        return threadLocalCache.get();\r\n+    }\r\n+\r\n+    private static void clearCache() {\r\n+        Map<String, Object> cache = getCache();\r\n+        cache.clear();\r\n+        threadLocalCache.remove();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/AnnotatedMethodParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/AnnotatedMethodParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,64 +1,64 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-/**\n- * The interface to process the parameter of method that was annotated\n- *\n- * @since 2.7.6\n- */\n-@SPI\n-public interface AnnotatedMethodParameterProcessor extends Prioritized {\n-\n-    /**\n-     * The string presenting the annotation type\n-     *\n-     * @return non-null\n-     */\n-    String getAnnotationType();\n-\n-    /**\n-     * Process the specified method {@link VariableElement parameter}\n-     *\n-     * @param annotation         {@link AnnotationMirror the target annotation} whose type is {@link #getAnnotationType()}\n-     * @param parameter          {@link VariableElement method parameter}\n-     * @param parameterIndex     the index of parameter in the method\n-     * @param method             {@link ExecutableElement method that parameter belongs to}\n-     * @param restMethodMetadata {@link RestMethodMetadata the metadata is used to update}\n-     */\n-    void process(AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method,\n-                 RestMethodMetadata restMethodMetadata);\n-\n-\n-    /**\n-     * Build the default value\n-     *\n-     * @param parameterIndex the index of parameter\n-     * @return the placeholder\n-     */\n-    static String buildDefaultValue(int parameterIndex) {\n-        return \"{\" + parameterIndex + \"}\";\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+/**\r\n+ * The interface to process the parameter of method that was annotated\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI\r\n+public interface AnnotatedMethodParameterProcessor extends Prioritized {\r\n+\r\n+    /**\r\n+     * The string presenting the annotation type\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    String getAnnotationType();\r\n+\r\n+    /**\r\n+     * Process the specified method {@link VariableElement parameter}\r\n+     *\r\n+     * @param annotation         {@link AnnotationMirror the target annotation} whose type is {@link #getAnnotationType()}\r\n+     * @param parameter          {@link VariableElement method parameter}\r\n+     * @param parameterIndex     the index of parameter in the method\r\n+     * @param method             {@link ExecutableElement method that parameter belongs to}\r\n+     * @param restMethodMetadata {@link RestMethodMetadata the metadata is used to update}\r\n+     */\r\n+    void process(AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method,\r\n+                 RestMethodMetadata restMethodMetadata);\r\n+\r\n+\r\n+    /**\r\n+     * Build the default value\r\n+     *\r\n+     * @param parameterIndex the index of parameter\r\n+     * @return the placeholder\r\n+     */\r\n+    static String buildDefaultValue(int parameterIndex) {\r\n+        return \"{\" + parameterIndex + \"}\";\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/DefaultServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/DefaultServiceRestMetadataResolver.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,186 +1,186 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.common.convert.Converter;\n-import org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.JAXRSServiceRestMetadataResolver;\n-import org.apache.dubbo.metadata.annotation.processing.rest.springmvc.SpringMvcServiceRestMetadataResolver;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.element.VariableElement;\n-import javax.lang.model.type.TypeMirror;\n-import java.util.LinkedHashSet;\n-import java.util.List;\n-import java.util.Set;\n-\n-import static java.lang.String.valueOf;\n-import static java.util.Arrays.asList;\n-import static org.apache.dubbo.common.convert.Converter.getConverter;\n-import static org.apache.dubbo.common.utils.ClassUtils.forName;\n-import static org.apache.dubbo.common.utils.StringUtils.SLASH_CHAR;\n-import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.warn;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.resolveServiceInterfaceName;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.findInterface;\n-\n-/**\n- * The default implementation of {@link ServiceRestMetadataResolver}\n- *\n- * @since 2.7.6\n- */\n-public class DefaultServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    private static final char PACKAGE_SEPARATOR = '.';\n-\n-    private static final char PATH_SEPARATOR = SLASH_CHAR;\n-\n-    private static final String HTTP_REQUEST_METHOD = \"POST\";\n-\n-    private static final List<String> MEDIA_TYPES = asList(\n-            \"application/json;\",\n-            \"application/*+json\",\n-            \"application/xml;charset=UTF-8\",\n-            \"text/xml;charset=UTF-8\",\n-            \"application/*+xml;charset=UTF-8\"\n-    );\n-\n-    private final Set<ExecutableElement> hasComplexParameterTypeMethods = new LinkedHashSet<>();\n-\n-    @Override\n-    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\n-        return !JAXRSServiceRestMetadataResolver.supports(serviceType) &&\n-                !SpringMvcServiceRestMetadataResolver.supports(serviceType);\n-    }\n-\n-    @Override\n-    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                               TypeElement serviceInterfaceType, ExecutableElement method) {\n-        // TODO add some criterion\n-        return true;\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                        ExecutableElement method) {\n-\n-        AnnotationMirror serviceAnnotation = getAnnotation(serviceType);\n-\n-        String serviceInterfaceName = resolveServiceInterfaceName(serviceType, serviceAnnotation);\n-\n-        TypeMirror serviceInterface = findInterface(serviceType.asType(), serviceInterfaceName);\n-\n-        StringBuilder requestPathBuilder = new StringBuilder();\n-        // the name of service type as the root path\n-        String rootPath = buildRootPath(serviceInterface);\n-        // the method name as the sub path\n-        String subPath = buildSubPath(method);\n-\n-        requestPathBuilder.append(rootPath).append(subPath);\n-        // the methods' parameters as the the path variables\n-        List<? extends VariableElement> parameters = method.getParameters();\n-\n-        for (int i = 0; i < parameters.size(); i++) {\n-            VariableElement parameter = parameters.get(i);\n-            TypeMirror parameterType = parameter.asType();\n-            if (isComplexType(parameterType)) {\n-                if (addComplexParameterType(method)) {\n-                    continue;\n-                } else {\n-                    // The count of complex types must be only one, or return immediately\n-                    warn(\"The method[%s] contains more than one complex parameter type, \" +\n-                            \"thus it will not be chosen as the REST service\", method.toString());\n-                }\n-            }\n-            String parameterName = parameter.getSimpleName().toString();\n-            // If \"-parameters\" option is enabled, take the parameter name as the path variable name,\n-            // or use the index of parameter\n-            String pathVariableName = isEnabledParametersCompilerOption(parameterName) ? parameterName : valueOf(i);\n-            requestPathBuilder.append(PATH_SEPARATOR).append(\"{\").append(pathVariableName).append(\"}\");\n-        }\n-\n-        return requestPathBuilder.toString();\n-    }\n-\n-    private String buildRootPath(TypeMirror serviceInterface) {\n-        return PATH_SEPARATOR + serviceInterface.toString().replace(PACKAGE_SEPARATOR, PATH_SEPARATOR);\n-    }\n-\n-    private String buildSubPath(ExecutableElement method) {\n-        return PATH_SEPARATOR + method.getSimpleName().toString();\n-    }\n-\n-    private boolean isEnabledParametersCompilerOption(String parameterName) {\n-        return !parameterName.startsWith(\"arg\");\n-    }\n-\n-    private boolean isComplexType(TypeMirror parameterType) {\n-        return !supportsPathVariableType(parameterType);\n-    }\n-\n-    /**\n-     * Supports the type of parameter or not, based by {@link Converter}'s conversion feature\n-     *\n-     * @param parameterType the type of parameter\n-     * @return if supports, this method will return <code>true</code>, or <code>false</code>\n-     */\n-    private boolean supportsPathVariableType(TypeMirror parameterType) {\n-        String className = parameterType.toString();\n-        ClassLoader classLoader = getClass().getClassLoader();\n-        boolean supported;\n-        try {\n-            Class<?> targetType = forName(className, classLoader);\n-            supported = getConverter(String.class, targetType) != null;\n-        } catch (ClassNotFoundException e) {\n-            supported = false;\n-        }\n-        return supported;\n-    }\n-\n-    @Override\n-    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                          ExecutableElement method) {\n-        return HTTP_REQUEST_METHOD;\n-    }\n-\n-    @Override\n-    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> produces) {\n-        TypeMirror returnType = method.getReturnType();\n-        if (isComplexType(returnType)) {\n-            produces.addAll(MEDIA_TYPES);\n-        }\n-    }\n-\n-    @Override\n-    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> consumes) {\n-        if (hasComplexParameterType(method)) {\n-            consumes.addAll(MEDIA_TYPES);\n-        }\n-    }\n-\n-    private boolean addComplexParameterType(ExecutableElement method) {\n-        return hasComplexParameterTypeMethods.add(method);\n-    }\n-\n-    private boolean hasComplexParameterType(ExecutableElement method) {\n-        return hasComplexParameterTypeMethods.remove(method);\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.common.convert.Converter;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.JAXRSServiceRestMetadataResolver;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.springmvc.SpringMvcServiceRestMetadataResolver;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.util.Arrays.asList;\r\n+import static org.apache.dubbo.common.convert.Converter.getConverter;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.forName;\r\n+import static org.apache.dubbo.common.utils.StringUtils.SLASH_CHAR;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.warn;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.resolveServiceInterfaceName;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.findInterface;\r\n+\r\n+/**\r\n+ * The default implementation of {@link ServiceRestMetadataResolver}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class DefaultServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    private static final char PACKAGE_SEPARATOR = '.';\r\n+\r\n+    private static final char PATH_SEPARATOR = SLASH_CHAR;\r\n+\r\n+    private static final String HTTP_REQUEST_METHOD = \"POST\";\r\n+\r\n+    private static final List<String> MEDIA_TYPES = asList(\r\n+            \"application/json;\",\r\n+            \"application/*+json\",\r\n+            \"application/xml;charset=UTF-8\",\r\n+            \"text/xml;charset=UTF-8\",\r\n+            \"application/*+xml;charset=UTF-8\"\r\n+    );\r\n+\r\n+    private final Set<ExecutableElement> hasComplexParameterTypeMethods = new LinkedHashSet<>();\r\n+\r\n+    @Override\r\n+    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\r\n+        return !JAXRSServiceRestMetadataResolver.supports(serviceType) &&\r\n+                !SpringMvcServiceRestMetadataResolver.supports(serviceType);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                               TypeElement serviceInterfaceType, ExecutableElement method) {\r\n+        // TODO add some criterion\r\n+        return true;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                        ExecutableElement method) {\r\n+\r\n+        AnnotationMirror serviceAnnotation = getAnnotation(serviceType);\r\n+\r\n+        String serviceInterfaceName = resolveServiceInterfaceName(serviceType, serviceAnnotation);\r\n+\r\n+        TypeMirror serviceInterface = findInterface(serviceType.asType(), serviceInterfaceName);\r\n+\r\n+        StringBuilder requestPathBuilder = new StringBuilder();\r\n+        // the name of service type as the root path\r\n+        String rootPath = buildRootPath(serviceInterface);\r\n+        // the method name as the sub path\r\n+        String subPath = buildSubPath(method);\r\n+\r\n+        requestPathBuilder.append(rootPath).append(subPath);\r\n+        // the methods' parameters as the the path variables\r\n+        List<? extends VariableElement> parameters = method.getParameters();\r\n+\r\n+        for (int i = 0; i < parameters.size(); i++) {\r\n+            VariableElement parameter = parameters.get(i);\r\n+            TypeMirror parameterType = parameter.asType();\r\n+            if (isComplexType(parameterType)) {\r\n+                if (addComplexParameterType(method)) {\r\n+                    continue;\r\n+                } else {\r\n+                    // The count of complex types must be only one, or return immediately\r\n+                    warn(\"The method[%s] contains more than one complex parameter type, \" +\r\n+                            \"thus it will not be chosen as the REST service\", method.toString());\r\n+                }\r\n+            }\r\n+            String parameterName = parameter.getSimpleName().toString();\r\n+            // If \"-parameters\" option is enabled, take the parameter name as the path variable name,\r\n+            // or use the index of parameter\r\n+            String pathVariableName = isEnabledParametersCompilerOption(parameterName) ? parameterName : valueOf(i);\r\n+            requestPathBuilder.append(PATH_SEPARATOR).append(\"{\").append(pathVariableName).append(\"}\");\r\n+        }\r\n+\r\n+        return requestPathBuilder.toString();\r\n+    }\r\n+\r\n+    private String buildRootPath(TypeMirror serviceInterface) {\r\n+        return PATH_SEPARATOR + serviceInterface.toString().replace(PACKAGE_SEPARATOR, PATH_SEPARATOR);\r\n+    }\r\n+\r\n+    private String buildSubPath(ExecutableElement method) {\r\n+        return PATH_SEPARATOR + method.getSimpleName().toString();\r\n+    }\r\n+\r\n+    private boolean isEnabledParametersCompilerOption(String parameterName) {\r\n+        return !parameterName.startsWith(\"arg\");\r\n+    }\r\n+\r\n+    private boolean isComplexType(TypeMirror parameterType) {\r\n+        return !supportsPathVariableType(parameterType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Supports the type of parameter or not, based by {@link Converter}'s conversion feature\r\n+     *\r\n+     * @param parameterType the type of parameter\r\n+     * @return if supports, this method will return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    private boolean supportsPathVariableType(TypeMirror parameterType) {\r\n+        String className = parameterType.toString();\r\n+        ClassLoader classLoader = getClass().getClassLoader();\r\n+        boolean supported;\r\n+        try {\r\n+            Class<?> targetType = forName(className, classLoader);\r\n+            supported = getConverter(String.class, targetType) != null;\r\n+        } catch (ClassNotFoundException e) {\r\n+            supported = false;\r\n+        }\r\n+        return supported;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                          ExecutableElement method) {\r\n+        return HTTP_REQUEST_METHOD;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> produces) {\r\n+        TypeMirror returnType = method.getReturnType();\r\n+        if (isComplexType(returnType)) {\r\n+            produces.addAll(MEDIA_TYPES);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> consumes) {\r\n+        if (hasComplexParameterType(method)) {\r\n+            consumes.addAll(MEDIA_TYPES);\r\n+        }\r\n+    }\r\n+\r\n+    private boolean addComplexParameterType(ExecutableElement method) {\r\n+        return hasComplexParameterTypeMethods.add(method);\r\n+    }\r\n+\r\n+    private boolean hasComplexParameterType(ExecutableElement method) {\r\n+        return hasComplexParameterTypeMethods.remove(method);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataAnnotationProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataAnnotationProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,86 +1,86 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.metadata.annotation.processing.AbstractServiceAnnotationProcessor;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.annotation.processing.Processor;\n-import javax.annotation.processing.RoundEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import java.io.IOException;\n-import java.util.LinkedHashSet;\n-import java.util.Set;\n-\n-import static javax.lang.model.util.ElementFilter.typesIn;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.isServiceAnnotationPresent;\n-\n-/**\n- * The {@link Processor} class to generate the metadata of REST from the classes that are annotated by Dubbo's\n- *\n- * @Service\n- * @see Processor\n- * @since 2.7.6\n- */\n-public class ServiceRestMetadataAnnotationProcessor extends AbstractServiceAnnotationProcessor {\n-\n-    private Set<ServiceRestMetadataResolver> metadataProcessors;\n-\n-    private ServiceRestMetadataStorage serviceRestMetadataWriter;\n-\n-    private Set<ServiceRestMetadata> serviceRestMetadata = new LinkedHashSet<>();\n-\n-    @Override\n-    public synchronized void init(ProcessingEnvironment processingEnv) {\n-        super.init(processingEnv);\n-        this.metadataProcessors = getExtensionLoader(ServiceRestMetadataResolver.class).getSupportedExtensionInstances();\n-        this.serviceRestMetadataWriter = new ServiceRestMetadataStorage(processingEnv);\n-    }\n-\n-    @Override\n-    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {\n-\n-        typesIn(roundEnv.getRootElements()).forEach(serviceType -> process(processingEnv, serviceType, annotations));\n-\n-        if (roundEnv.processingOver()) {\n-            try {\n-                serviceRestMetadataWriter.append(serviceRestMetadata);\n-            } catch (IOException e) {\n-                throw new IllegalStateException(e);\n-            }\n-        }\n-\n-        return false;\n-    }\n-\n-    private void process(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                         Set<? extends TypeElement> annotations) {\n-        metadataProcessors\n-                .stream()\n-                .filter(processor -> supports(processor, processingEnv, serviceType))\n-                .map(processor -> processor.resolve(processingEnv, serviceType, annotations))\n-                .forEach(serviceRestMetadata::add);\n-    }\n-\n-    private boolean supports(ServiceRestMetadataResolver processor, ProcessingEnvironment processingEnv,\n-                             TypeElement serviceType) {\n-        //  @Service must be present in service type\n-        return isServiceAnnotationPresent(serviceType) && processor.supports(processingEnv, serviceType);\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.AbstractServiceAnnotationProcessor;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.annotation.processing.Processor;\r\n+import javax.annotation.processing.RoundEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import java.io.IOException;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.Set;\r\n+\r\n+import static javax.lang.model.util.ElementFilter.typesIn;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.isServiceAnnotationPresent;\r\n+\r\n+/**\r\n+ * The {@link Processor} class to generate the metadata of REST from the classes that are annotated by Dubbo's\r\n+ *\r\n+ * @Service\r\n+ * @see Processor\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ServiceRestMetadataAnnotationProcessor extends AbstractServiceAnnotationProcessor {\r\n+\r\n+    private Set<ServiceRestMetadataResolver> metadataProcessors;\r\n+\r\n+    private ServiceRestMetadataStorage serviceRestMetadataWriter;\r\n+\r\n+    private Set<ServiceRestMetadata> serviceRestMetadata = new LinkedHashSet<>();\r\n+\r\n+    @Override\r\n+    public synchronized void init(ProcessingEnvironment processingEnv) {\r\n+        super.init(processingEnv);\r\n+        this.metadataProcessors = getExtensionLoader(ServiceRestMetadataResolver.class).getSupportedExtensionInstances();\r\n+        this.serviceRestMetadataWriter = new ServiceRestMetadataStorage(processingEnv);\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {\r\n+\r\n+        typesIn(roundEnv.getRootElements()).forEach(serviceType -> process(processingEnv, serviceType, annotations));\r\n+\r\n+        if (roundEnv.processingOver()) {\r\n+            try {\r\n+                serviceRestMetadataWriter.append(serviceRestMetadata);\r\n+            } catch (IOException e) {\r\n+                throw new IllegalStateException(e);\r\n+            }\r\n+        }\r\n+\r\n+        return false;\r\n+    }\r\n+\r\n+    private void process(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                         Set<? extends TypeElement> annotations) {\r\n+        metadataProcessors\r\n+                .stream()\r\n+                .filter(processor -> supports(processor, processingEnv, serviceType))\r\n+                .map(processor -> processor.resolve(processingEnv, serviceType, annotations))\r\n+                .forEach(serviceRestMetadata::add);\r\n+    }\r\n+\r\n+    private boolean supports(ServiceRestMetadataResolver processor, ProcessingEnvironment processingEnv,\r\n+                             TypeElement serviceType) {\r\n+        //  @Service must be present in service type\r\n+        return isServiceAnnotationPresent(serviceType) && processor.supports(processingEnv, serviceType);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataResolver.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,55 +1,55 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import java.util.Set;\n-\n-/**\n- * The class to resolve {@link ServiceRestMetadata} based on Annotation Processor Tool\n- *\n- * @since 2.7.6\n- */\n-@SPI(\"default\")\n-public interface ServiceRestMetadataResolver extends Prioritized {\n-\n-    /**\n-     * Supports or not to the specified service type\n-     *\n-     * @param processingEnvironment {@link ProcessingEnvironment}\n-     * @param serviceType           Dubbo service type or interface\n-     * @return if supports, return <code>true</code>, or <code>false</code>\n-     */\n-    boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType);\n-\n-    /**\n-     * Resolve the {@link ServiceRestMetadata} from given service type\n-     *\n-     * @param processingEnvironment {@link ProcessingEnvironment}\n-     * @param serviceType           Dubbo service type or interface\n-     * @param annotations\n-     * @return non-null\n-     */\n-    ServiceRestMetadata resolve(ProcessingEnvironment processingEnvironment,\n-                                TypeElement serviceType,\n-                                Set<? extends TypeElement> annotations);\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import java.util.Set;\r\n+\r\n+/**\r\n+ * The class to resolve {@link ServiceRestMetadata} based on Annotation Processor Tool\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI(\"default\")\r\n+public interface ServiceRestMetadataResolver extends Prioritized {\r\n+\r\n+    /**\r\n+     * Supports or not to the specified service type\r\n+     *\r\n+     * @param processingEnvironment {@link ProcessingEnvironment}\r\n+     * @param serviceType           Dubbo service type or interface\r\n+     * @return if supports, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType);\r\n+\r\n+    /**\r\n+     * Resolve the {@link ServiceRestMetadata} from given service type\r\n+     *\r\n+     * @param processingEnvironment {@link ProcessingEnvironment}\r\n+     * @param serviceType           Dubbo service type or interface\r\n+     * @param annotations\r\n+     * @return non-null\r\n+     */\r\n+    ServiceRestMetadata resolve(ProcessingEnvironment processingEnvironment,\r\n+                                TypeElement serviceType,\r\n+                                Set<? extends TypeElement> annotations);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataStorage.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataStorage.java", "comments": ["Ordering 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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.metadata.annotation.processing.ClassPathMetadataStorage;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\n-\n-import com.google.gson.Gson;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import java.io.IOException;\n-import java.util.List;\n-import java.util.Set;\n-\n-import static com.google.gson.reflect.TypeToken.getParameterized;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SERVICE_REST_METADATA_RESOURCE_PATH;\n-\n-/**\n- * The storage for {@link ServiceRestMetadata}\n- */\n-public class ServiceRestMetadataStorage {\n-\n-    private final ClassPathMetadataStorage storage;\n-\n-    public ServiceRestMetadataStorage(ProcessingEnvironment processingEnv) {\n-        this.storage = new ClassPathMetadataStorage(processingEnv);\n-    }\n-\n-    public void append(Set<ServiceRestMetadata> serviceRestMetadata) throws IOException {\n-        storage.read(SERVICE_REST_METADATA_RESOURCE_PATH, reader -> {\n-            Gson gson = new Gson();\n-            return (List) gson.fromJson(reader, getParameterized(List.class, ServiceRestMetadata.class).getType());\n-        }).ifPresent(existedMetadata -> {\n-            // Add all existed ServiceRestMetadata\n-            serviceRestMetadata.addAll(existedMetadata);\n-        });\n-        write(serviceRestMetadata);\n-    }\n-\n-    public void write(Set<ServiceRestMetadata> serviceRestMetadata) throws IOException {\n-        if (serviceRestMetadata.isEmpty()) {\n-            return;\n-        }\n-        storage.write(() -> new Gson().toJson(serviceRestMetadata), SERVICE_REST_METADATA_RESOURCE_PATH);\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.ClassPathMetadataStorage;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\r\n+\r\n+import com.google.gson.Gson;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import java.io.IOException;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+\r\n+import static com.google.gson.reflect.TypeToken.getParameterized;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SERVICE_REST_METADATA_RESOURCE_PATH;\r\n+\r\n+/**\r\n+ * The storage for {@link ServiceRestMetadata}\r\n+ */\r\n+public class ServiceRestMetadataStorage {\r\n+\r\n+    private final ClassPathMetadataStorage storage;\r\n+\r\n+    public ServiceRestMetadataStorage(ProcessingEnvironment processingEnv) {\r\n+        this.storage = new ClassPathMetadataStorage(processingEnv);\r\n+    }\r\n+\r\n+    public void append(Set<ServiceRestMetadata> serviceRestMetadata) throws IOException {\r\n+        storage.read(SERVICE_REST_METADATA_RESOURCE_PATH, reader -> {\r\n+            Gson gson = new Gson();\r\n+            return (List) gson.fromJson(reader, getParameterized(List.class, ServiceRestMetadata.class).getType());\r\n+        }).ifPresent(existedMetadata -> {\r\n+            // Add all existed ServiceRestMetadata\r\n+            serviceRestMetadata.addAll(existedMetadata);\r\n+        });\r\n+        write(serviceRestMetadata);\r\n+    }\r\n+\r\n+    public void write(Set<ServiceRestMetadata> serviceRestMetadata) throws IOException {\r\n+        if (serviceRestMetadata.isEmpty()) {\r\n+            return;\r\n+        }\r\n+        storage.write(() -> new Gson().toJson(serviceRestMetadata), SERVICE_REST_METADATA_RESOURCE_PATH);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/DefaultValueParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/DefaultValueParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,75 +1,75 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-import java.util.List;\n-import java.util.Map;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\n-\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @DefaultValue\n- * *\n- *\n- * @since 2.7.6\n- */\n-public class DefaultValueParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String annotationValue, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-\n-        // process the request parameters\n-        setDefaultValue(requestMetadata.getParams(), defaultValue, annotationValue);\n-        // process the request headers\n-        setDefaultValue(requestMetadata.getHeaders(), defaultValue, annotationValue);\n-\n-    }\n-\n-    private void setDefaultValue(Map<String, List<String>> source, String placeholderValue, String defaultValue) {\n-        OUTTER:\n-        for (Map.Entry<String, List<String>> entry : source.entrySet()) {\n-            List<String> values = entry.getValue();\n-            int size = values.size();\n-            for (int i = 0; i < size; i++) {\n-                String value = values.get(i);\n-                if (placeholderValue.equals(value)) {\n-                    values.set(i, defaultValue);\n-                    break OUTTER;\n-                }\n-            }\n-        }\n-    }\n-\n-    public int getPriority() {\n-        return MIN_PRIORITY;\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\r\n+\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @DefaultValue\r\n+ * *\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class DefaultValueParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String annotationValue, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+\r\n+        // process the request parameters\r\n+        setDefaultValue(requestMetadata.getParams(), defaultValue, annotationValue);\r\n+        // process the request headers\r\n+        setDefaultValue(requestMetadata.getHeaders(), defaultValue, annotationValue);\r\n+\r\n+    }\r\n+\r\n+    private void setDefaultValue(Map<String, List<String>> source, String placeholderValue, String defaultValue) {\r\n+        OUTTER:\r\n+        for (Map.Entry<String, List<String>> entry : source.entrySet()) {\r\n+            List<String> values = entry.getValue();\r\n+            int size = values.size();\r\n+            for (int i = 0; i < size; i++) {\r\n+                String value = values.get(i);\r\n+                if (placeholderValue.equals(value)) {\r\n+                    values.set(i, defaultValue);\r\n+                    break OUTTER;\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/FormParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/FormParamParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,34 +1,34 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.FORM_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @FormParam\n- *\n- * @since 2.7.6\n- */\n-public class FormParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return FORM_PARAM_ANNOTATION_CLASS_NAME;\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.FORM_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @FormParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class FormParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return FORM_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/HeaderParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/HeaderParamParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,51 +1,51 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HEADER_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @HeaderParam\n- *\n- * @since 2.7.6\n- */\n-public class HeaderParamParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return HEADER_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String headerName, String defaultValue, AnnotationMirror annotation,\n-                           VariableElement parameter, int parameterIndex,\n-                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-        // Add the placeholder as header value\n-        requestMetadata.addHeader(headerName, buildDefaultValue(parameterIndex));\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HEADER_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @HeaderParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class HeaderParamParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return HEADER_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String headerName, String defaultValue, AnnotationMirror annotation,\r\n+                           VariableElement parameter, int parameterIndex,\r\n+                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+        // Add the placeholder as header value\r\n+        requestMetadata.addHeader(headerName, buildDefaultValue(parameterIndex));\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/JAXRSServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/JAXRSServiceRestMetadataResolver.java", "comments": ["Ordering 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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractServiceRestMetadataResolver;\n-import org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.AnnotatedConstruct;\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import java.util.Set;\n-import java.util.stream.Stream;\n-\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findMetaAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getValue;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.CONSUMES_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HTTP_METHOD_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PATH_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PRODUCES_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * {@link ServiceRestMetadataResolver} implementation for JAX-RS 2 and 1\n- *\n- * @since 2.7.6\n- */\n-public class JAXRSServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    @Override\n-    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\n-        return supports(serviceType);\n-    }\n-\n-    public static boolean supports(TypeElement serviceType) {\n-        return isAnnotationPresent(serviceType, PATH_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    @Override\n-    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                               TypeElement serviceInterfaceType, ExecutableElement method) {\n-        return isAnnotationPresent(method, PATH_ANNOTATION_CLASS_NAME) ||\n-                isAnnotationPresent(method, HTTP_METHOD_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType, ExecutableElement method) {\n-        String pathFromType = getPathValue(processingEnv, serviceType);\n-        String pathFromMethod = getPathValue(method);\n-        return buildPath(pathFromType, pathFromMethod);\n-    }\n-\n-    @Override\n-    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType, ExecutableElement method) {\n-        AnnotationMirror annotation = findMetaAnnotation(method, HTTP_METHOD_ANNOTATION_CLASS_NAME);\n-        return getValue(annotation);\n-    }\n-\n-    @Override\n-    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> produces) {\n-        addAnnotationValues(method, PRODUCES_ANNOTATION_CLASS_NAME, produces);\n-    }\n-\n-    @Override\n-    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> consumes) {\n-        addAnnotationValues(method, CONSUMES_ANNOTATION_CLASS_NAME, consumes);\n-    }\n-\n-\n-    private void addAnnotationValues(Element element, String annotationAttributeName, Set<String> result) {\n-        AnnotationMirror annotation = findAnnotation(element, annotationAttributeName);\n-        String[] value = getValue(annotation);\n-        if (value != null) {\n-            Stream.of(value).forEach(result::add);\n-        }\n-    }\n-\n-    private String getPathValue(ProcessingEnvironment processingEnv, TypeElement serviceType) {\n-        AnnotationMirror annotation = findAnnotation(serviceType, PATH_ANNOTATION_CLASS_NAME);\n-        return getValue(annotation);\n-    }\n-\n-    private String getPathValue(AnnotatedConstruct annotatedConstruct) {\n-        AnnotationMirror annotation = getAnnotation(annotatedConstruct, PATH_ANNOTATION_CLASS_NAME);\n-        return getValue(annotation);\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractServiceRestMetadataResolver;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.AnnotatedConstruct;\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import java.util.Set;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findMetaAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getValue;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.CONSUMES_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HTTP_METHOD_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PATH_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PRODUCES_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * {@link ServiceRestMetadataResolver} implementation for JAX-RS 2 and 1\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class JAXRSServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    @Override\r\n+    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\r\n+        return supports(serviceType);\r\n+    }\r\n+\r\n+    public static boolean supports(TypeElement serviceType) {\r\n+        return isAnnotationPresent(serviceType, PATH_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                               TypeElement serviceInterfaceType, ExecutableElement method) {\r\n+        return isAnnotationPresent(method, PATH_ANNOTATION_CLASS_NAME) ||\r\n+                isAnnotationPresent(method, HTTP_METHOD_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType, ExecutableElement method) {\r\n+        String pathFromType = getPathValue(processingEnv, serviceType);\r\n+        String pathFromMethod = getPathValue(method);\r\n+        return buildPath(pathFromType, pathFromMethod);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType, ExecutableElement method) {\r\n+        AnnotationMirror annotation = findMetaAnnotation(method, HTTP_METHOD_ANNOTATION_CLASS_NAME);\r\n+        return getValue(annotation);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> produces) {\r\n+        addAnnotationValues(method, PRODUCES_ANNOTATION_CLASS_NAME, produces);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> consumes) {\r\n+        addAnnotationValues(method, CONSUMES_ANNOTATION_CLASS_NAME, consumes);\r\n+    }\r\n+\r\n+\r\n+    private void addAnnotationValues(Element element, String annotationAttributeName, Set<String> result) {\r\n+        AnnotationMirror annotation = findAnnotation(element, annotationAttributeName);\r\n+        String[] value = getValue(annotation);\r\n+        if (value != null) {\r\n+            Stream.of(value).forEach(result::add);\r\n+        }\r\n+    }\r\n+\r\n+    private String getPathValue(ProcessingEnvironment processingEnv, TypeElement serviceType) {\r\n+        AnnotationMirror annotation = findAnnotation(serviceType, PATH_ANNOTATION_CLASS_NAME);\r\n+        return getValue(annotation);\r\n+    }\r\n+\r\n+    private String getPathValue(AnnotatedConstruct annotatedConstruct) {\r\n+        AnnotationMirror annotation = getAnnotation(annotatedConstruct, PATH_ANNOTATION_CLASS_NAME);\r\n+        return getValue(annotation);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/MatrixParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/MatrixParamParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,34 +1,34 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.MATRIX_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @MatrixParam\n- *\n- * @since 2.7.6\n- */\n-public class MatrixParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return MATRIX_PARAM_ANNOTATION_CLASS_NAME;\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.MATRIX_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @MatrixParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class MatrixParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return MATRIX_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/ParamAnnotationParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/ParamAnnotationParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,38 +1,38 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @*Param\n- */\n-public abstract class ParamAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    protected void process(String name, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex,\n-                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-        requestMetadata.addParam(name, defaultValue);\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @*Param\r\n+ */\r\n+public abstract class ParamAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    protected void process(String name, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex,\r\n+                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+        requestMetadata.addParam(name, defaultValue);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/QueryParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/QueryParamParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,34 +1,34 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.QUERY_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @QueryParam\n- *\n- * @since 2.7.6\n- */\n-public class QueryParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return QUERY_PARAM_ANNOTATION_CLASS_NAME;\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.QUERY_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @QueryParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class QueryParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return QUERY_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,69 +1,69 @@\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.metadata.annotation.processing.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @Request*\n- */\n-public abstract class AbstractRequestAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-\n-    protected abstract void process(String name, String defaultValue, AnnotationMirror annotation,\n-                                    VariableElement parameter, int parameterIndex,\n-                                    ExecutableElement method,\n-                                    RestMethodMetadata restMethodMetadata);\n-\n-    @Override\n-    protected String getAnnotationValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\n-        // try to get \"value\" attribute first\n-        String name = super.getAnnotationValue(annotation, parameter, parameterIndex);\n-\n-        // try to get \"name\" attribute if required\n-        if (isEmpty(name)) {\n-            name = getAttribute(annotation, \"name\");\n-        }\n-\n-        // finally , try to the name of parameter\n-        if (isEmpty(name)) {\n-            name = parameter.getSimpleName().toString();\n-        }\n-\n-        return name;\n-    }\n-\n-    protected String getDefaultValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\n-        String defaultValue = getAttribute(annotation, \"defaultValue\");\n-        if (isEmpty(defaultValue)) {\n-            defaultValue = super.getDefaultValue(annotation, parameter, parameterIndex);\n-        }\n-        return defaultValue;\n-    }\n-\n-    protected boolean isEmpty(String str) {\n-        return str == null || str.isEmpty();\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.metadata.annotation.processing.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @Request*\r\n+ */\r\n+public abstract class AbstractRequestAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+\r\n+    protected abstract void process(String name, String defaultValue, AnnotationMirror annotation,\r\n+                                    VariableElement parameter, int parameterIndex,\r\n+                                    ExecutableElement method,\r\n+                                    RestMethodMetadata restMethodMetadata);\r\n+\r\n+    @Override\r\n+    protected String getAnnotationValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\r\n+        // try to get \"value\" attribute first\r\n+        String name = super.getAnnotationValue(annotation, parameter, parameterIndex);\r\n+\r\n+        // try to get \"name\" attribute if required\r\n+        if (isEmpty(name)) {\r\n+            name = getAttribute(annotation, \"name\");\r\n+        }\r\n+\r\n+        // finally , try to the name of parameter\r\n+        if (isEmpty(name)) {\r\n+            name = parameter.getSimpleName().toString();\r\n+        }\r\n+\r\n+        return name;\r\n+    }\r\n+\r\n+    protected String getDefaultValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\r\n+        String defaultValue = getAttribute(annotation, \"defaultValue\");\r\n+        if (isEmpty(defaultValue)) {\r\n+            defaultValue = super.getDefaultValue(annotation, parameter, parameterIndex);\r\n+        }\r\n+        return defaultValue;\r\n+    }\r\n+\r\n+    protected boolean isEmpty(String str) {\r\n+        return str == null || str.isEmpty();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestHeaderParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestHeaderParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,43 +1,43 @@\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.metadata.annotation.processing.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_HEADER_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestHeader\n- */\n-public class RequestHeaderParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return REQUEST_HEADER_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String name, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        restMethodMetadata.getRequest().addHeader(name, defaultValue);\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.metadata.annotation.processing.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_HEADER_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestHeader\r\n+ */\r\n+public class RequestHeaderParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return REQUEST_HEADER_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String name, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        restMethodMetadata.getRequest().addHeader(name, defaultValue);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestParamParameterProcessor.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,44 +1,44 @@\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.metadata.annotation.processing.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestParam\n- */\n-public class RequestParamParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return REQUEST_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String name, String defaultValue, AnnotationMirror annotation,\n-                           VariableElement parameter, int parameterIndex,\n-                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        restMethodMetadata.getRequest().addParam(name, defaultValue);\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.metadata.annotation.processing.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestParam\r\n+ */\r\n+public class RequestParamParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return REQUEST_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String name, String defaultValue, AnnotationMirror annotation,\r\n+                           VariableElement parameter, int parameterIndex,\r\n+                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        restMethodMetadata.getRequest().addParam(name, defaultValue);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/SpringMvcServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/SpringMvcServiceRestMetadataResolver.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,165 +1,165 @@\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.metadata.annotation.processing.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractServiceRestMetadataResolver;\n-import org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.type.DeclaredType;\n-import java.lang.reflect.Array;\n-import java.util.Set;\n-\n-import static java.lang.String.valueOf;\n-import static java.lang.reflect.Array.getLength;\n-import static java.util.stream.Stream.of;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isEmpty;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findMetaAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAllAnnotations;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.CONTROLLER_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_MAPPING_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * {@link ServiceRestMetadataResolver}\n- *\n- * @since 2.7.6\n- */\n-public class SpringMvcServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    private static final int FIRST_ELEMENT_INDEX = 0;\n-\n-    @Override\n-    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\n-        return supports(serviceType);\n-    }\n-\n-    @Override\n-    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                               TypeElement serviceInterfaceType, ExecutableElement method) {\n-        return isAnnotationPresent(method, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    public static boolean supports(TypeElement serviceType) {\n-        return isAnnotationPresent(serviceType, CONTROLLER_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                        ExecutableElement method) {\n-\n-        String requestPathFromType = getRequestPath(serviceType);\n-\n-        String requestPathFromMethod = getRequestPath(method);\n-\n-        return buildPath(requestPathFromType, requestPathFromMethod);\n-    }\n-\n-\n-    @Override\n-    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                          ExecutableElement method) {\n-\n-        AnnotationMirror requestMapping = getRequestMapping(method);\n-\n-        // httpMethod is an array of RequestMethod\n-        Object httpMethod = getAttribute(requestMapping, \"method\");\n-\n-        if (httpMethod == null || getLength(httpMethod) < 1) {\n-            return null;\n-        }\n-\n-        // TODO Is is required to support more request methods?\n-        return valueOf(Array.get(httpMethod, FIRST_ELEMENT_INDEX));\n-    }\n-\n-    private AnnotationMirror getRequestMapping(Element element) {\n-        // try \"@RequestMapping\" first\n-        AnnotationMirror requestMapping = findAnnotation(element, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\n-        // try the annotation meta-annotated later\n-        if (requestMapping == null) {\n-            requestMapping = findMetaAnnotation(element, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\n-        }\n-        return requestMapping;\n-    }\n-\n-    @Override\n-    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> produces) {\n-        addMediaTypes(method, \"produces\", produces);\n-    }\n-\n-    @Override\n-    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> consumes) {\n-        addMediaTypes(method, \"consumes\", consumes);\n-    }\n-\n-    private void addMediaTypes(ExecutableElement method, String annotationAttributeName, Set<String> mediaTypesSet) {\n-\n-        AnnotationMirror mappingAnnotation = getMappingAnnotation(method);\n-\n-        String[] mediaTypes = getAttribute(mappingAnnotation, annotationAttributeName);\n-\n-        if (isNotEmpty(mediaTypes)) {\n-            of(mediaTypes).forEach(mediaTypesSet::add);\n-        }\n-    }\n-\n-    private AnnotationMirror getMappingAnnotation(Element element) {\n-        return computeIfAbsent(valueOf(element), key ->\n-                filterFirst(getAllAnnotations(element), annotation -> {\n-                    DeclaredType annotationType = annotation.getAnnotationType();\n-                    // try \"@RequestMapping\" first\n-                    if (REQUEST_MAPPING_ANNOTATION_CLASS_NAME.equals(annotationType.toString())) {\n-                        return true;\n-                    }\n-                    // try meta annotation\n-                    return isAnnotationPresent(annotationType.asElement(), REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\n-                })\n-        );\n-    }\n-\n-    private String getRequestPath(Element element) {\n-        AnnotationMirror mappingAnnotation = getMappingAnnotation(element);\n-        return getRequestPath(mappingAnnotation);\n-    }\n-\n-    private String getRequestPath(AnnotationMirror mappingAnnotation) {\n-        // try \"value\" first\n-        String[] value = getAttribute(mappingAnnotation, \"value\");\n-\n-        if (isEmpty(value)) { // try \"path\" later\n-            value = getAttribute(mappingAnnotation, \"path\");\n-        }\n-\n-        if (isEmpty(value)) {\n-            return \"\";\n-        }\n-        // TODO Is is required to support more request paths?\n-        return value[FIRST_ELEMENT_INDEX];\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.metadata.annotation.processing.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractServiceRestMetadataResolver;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.type.DeclaredType;\r\n+import java.lang.reflect.Array;\r\n+import java.util.Set;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.lang.reflect.Array.getLength;\r\n+import static java.util.stream.Stream.of;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isEmpty;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findMetaAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAllAnnotations;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.CONTROLLER_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_MAPPING_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * {@link ServiceRestMetadataResolver}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class SpringMvcServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    private static final int FIRST_ELEMENT_INDEX = 0;\r\n+\r\n+    @Override\r\n+    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\r\n+        return supports(serviceType);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                               TypeElement serviceInterfaceType, ExecutableElement method) {\r\n+        return isAnnotationPresent(method, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    public static boolean supports(TypeElement serviceType) {\r\n+        return isAnnotationPresent(serviceType, CONTROLLER_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                        ExecutableElement method) {\r\n+\r\n+        String requestPathFromType = getRequestPath(serviceType);\r\n+\r\n+        String requestPathFromMethod = getRequestPath(method);\r\n+\r\n+        return buildPath(requestPathFromType, requestPathFromMethod);\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                          ExecutableElement method) {\r\n+\r\n+        AnnotationMirror requestMapping = getRequestMapping(method);\r\n+\r\n+        // httpMethod is an array of RequestMethod\r\n+        Object httpMethod = getAttribute(requestMapping, \"method\");\r\n+\r\n+        if (httpMethod == null || getLength(httpMethod) < 1) {\r\n+            return null;\r\n+        }\r\n+\r\n+        // TODO Is is required to support more request methods?\r\n+        return valueOf(Array.get(httpMethod, FIRST_ELEMENT_INDEX));\r\n+    }\r\n+\r\n+    private AnnotationMirror getRequestMapping(Element element) {\r\n+        // try \"@RequestMapping\" first\r\n+        AnnotationMirror requestMapping = findAnnotation(element, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\r\n+        // try the annotation meta-annotated later\r\n+        if (requestMapping == null) {\r\n+            requestMapping = findMetaAnnotation(element, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\r\n+        }\r\n+        return requestMapping;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> produces) {\r\n+        addMediaTypes(method, \"produces\", produces);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> consumes) {\r\n+        addMediaTypes(method, \"consumes\", consumes);\r\n+    }\r\n+\r\n+    private void addMediaTypes(ExecutableElement method, String annotationAttributeName, Set<String> mediaTypesSet) {\r\n+\r\n+        AnnotationMirror mappingAnnotation = getMappingAnnotation(method);\r\n+\r\n+        String[] mediaTypes = getAttribute(mappingAnnotation, annotationAttributeName);\r\n+\r\n+        if (isNotEmpty(mediaTypes)) {\r\n+            of(mediaTypes).forEach(mediaTypesSet::add);\r\n+        }\r\n+    }\r\n+\r\n+    private AnnotationMirror getMappingAnnotation(Element element) {\r\n+        return computeIfAbsent(valueOf(element), key ->\r\n+                filterFirst(getAllAnnotations(element), annotation -> {\r\n+                    DeclaredType annotationType = annotation.getAnnotationType();\r\n+                    // try \"@RequestMapping\" first\r\n+                    if (REQUEST_MAPPING_ANNOTATION_CLASS_NAME.equals(annotationType.toString())) {\r\n+                        return true;\r\n+                    }\r\n+                    // try meta annotation\r\n+                    return isAnnotationPresent(annotationType.asElement(), REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\r\n+                })\r\n+        );\r\n+    }\r\n+\r\n+    private String getRequestPath(Element element) {\r\n+        AnnotationMirror mappingAnnotation = getMappingAnnotation(element);\r\n+        return getRequestPath(mappingAnnotation);\r\n+    }\r\n+\r\n+    private String getRequestPath(AnnotationMirror mappingAnnotation) {\r\n+        // try \"value\" first\r\n+        String[] value = getAttribute(mappingAnnotation, \"value\");\r\n+\r\n+        if (isEmpty(value)) { // try \"path\" later\r\n+            value = getAttribute(mappingAnnotation, \"path\");\r\n+        }\r\n+\r\n+        if (isEmpty(value)) {\r\n+            return \"\";\r\n+        }\r\n+        // TODO Is is required to support more request paths?\r\n+        return value[FIRST_ELEMENT_INDEX];\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/AnnotationUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/AnnotationUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,233 +1,233 @@\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.metadata.annotation.processing.util;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.AnnotatedConstruct;\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.AnnotationValue;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.type.ArrayType;\n-import javax.lang.model.type.TypeMirror;\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Array;\n-import java.lang.reflect.Type;\n-import java.util.Collection;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Objects;\n-import java.util.function.Predicate;\n-import java.util.stream.Collectors;\n-\n-import static java.lang.Enum.valueOf;\n-import static java.util.Collections.emptyList;\n-import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getType;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isSameType;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isTypeElement;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofTypeElement;\n-\n-/**\n- * The utilities class for annotation in the package \"javax.lang.model.*\"\n- *\n- * @since 2.7.6\n- */\n-public interface AnnotationUtils {\n-\n-    static AnnotationMirror getAnnotation(AnnotatedConstruct annotatedConstruct,\n-                                          Class<? extends Annotation> annotationClass) {\n-        return annotationClass == null ?\n-                null :\n-                getAnnotation(annotatedConstruct, annotationClass.getTypeName());\n-    }\n-\n-    static AnnotationMirror getAnnotation(AnnotatedConstruct annotatedConstruct, CharSequence annotationClassName) {\n-        List<AnnotationMirror> annotations = getAnnotations(annotatedConstruct, annotationClassName);\n-        return annotations.isEmpty() ? null : annotations.get(0);\n-    }\n-\n-    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct, Class<? extends Annotation> annotationClass) {\n-        return annotationClass == null ?\n-                emptyList() :\n-                getAnnotations(annotatedConstruct, annotationClass.getTypeName());\n-    }\n-\n-    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct,\n-                                                 CharSequence annotationClassName) {\n-        return getAnnotations(annotatedConstruct,\n-                annotation -> isSameType(annotation.getAnnotationType(), annotationClassName));\n-    }\n-\n-    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct) {\n-        return getAnnotations(annotatedConstruct, EMPTY_ARRAY);\n-    }\n-\n-    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct,\n-                                                 Predicate<AnnotationMirror>... annotationFilters) {\n-\n-        AnnotatedConstruct actualAnnotatedConstruct = annotatedConstruct;\n-\n-        if (annotatedConstruct instanceof TypeMirror) {\n-            actualAnnotatedConstruct = ofTypeElement((TypeMirror) actualAnnotatedConstruct);\n-        }\n-\n-        return actualAnnotatedConstruct == null ?\n-                emptyList() :\n-                filterAll((List<AnnotationMirror>) actualAnnotatedConstruct.getAnnotationMirrors(), annotationFilters);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(TypeMirror type) {\n-        return getAllAnnotations(ofTypeElement(type));\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(Element element) {\n-        return getAllAnnotations(element, EMPTY_ARRAY);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, Class<? extends Annotation> annotationClass) {\n-        return getAllAnnotations(ofTypeElement(type), annotationClass);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(Element element, Class<? extends Annotation> annotationClass) {\n-        return element == null || annotationClass == null ?\n-                emptyList() :\n-                getAllAnnotations(element, annotationClass.getTypeName());\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, CharSequence annotationClassName) {\n-        return getAllAnnotations(ofTypeElement(type), annotationClassName);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(Element element, CharSequence annotationClassName) {\n-        return getAllAnnotations(element, annotation -> isSameType(annotation.getAnnotationType(), annotationClassName));\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, Predicate<AnnotationMirror>... annotationFilters) {\n-        return getAllAnnotations(ofTypeElement(type), annotationFilters);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(Element element, Predicate<AnnotationMirror>... annotationFilters) {\n-\n-        List<AnnotationMirror> allAnnotations = isTypeElement(element) ?\n-                getHierarchicalTypes(ofTypeElement(element))\n-                        .stream()\n-                        .map(AnnotationUtils::getAnnotations)\n-                        .flatMap(Collection::stream)\n-                        .collect(Collectors.toList()) :\n-                element == null ? emptyList() : (List<AnnotationMirror>) element.getAnnotationMirrors();\n-\n-        return filterAll(allAnnotations, annotationFilters);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, Type annotatedType) {\n-        return getAllAnnotations(processingEnv, annotatedType, EMPTY_ARRAY);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, Type annotatedType,\n-                                                    Predicate<AnnotationMirror>... annotationFilters) {\n-        return annotatedType == null ?\n-                emptyList() :\n-                getAllAnnotations(processingEnv, annotatedType.getTypeName(), annotationFilters);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, CharSequence annotatedTypeName,\n-                                                    Predicate<AnnotationMirror>... annotationFilters) {\n-        return getAllAnnotations(getType(processingEnv, annotatedTypeName), annotationFilters);\n-    }\n-\n-    static AnnotationMirror findAnnotation(TypeMirror type, Class<? extends Annotation> annotationClass) {\n-        return annotationClass == null ? null : findAnnotation(type, annotationClass.getTypeName());\n-    }\n-\n-    static AnnotationMirror findAnnotation(TypeMirror type, CharSequence annotationClassName) {\n-        return findAnnotation(ofTypeElement(type), annotationClassName);\n-    }\n-\n-    static AnnotationMirror findAnnotation(Element element, Class<? extends Annotation> annotationClass) {\n-        return annotationClass == null ? null : findAnnotation(element, annotationClass.getTypeName());\n-    }\n-\n-    static AnnotationMirror findAnnotation(Element element, CharSequence annotationClassName) {\n-        return filterFirst(getAllAnnotations(element, annotation -> isSameType(annotation.getAnnotationType(), annotationClassName)));\n-    }\n-\n-    static AnnotationMirror findMetaAnnotation(Element annotatedConstruct, CharSequence metaAnnotationClassName) {\n-        return annotatedConstruct == null ?\n-                null :\n-                getAnnotations(annotatedConstruct)\n-                        .stream()\n-                        .map(annotation -> findAnnotation(annotation.getAnnotationType(), metaAnnotationClassName))\n-                        .filter(Objects::nonNull)\n-                        .findFirst()\n-                        .orElse(null);\n-    }\n-\n-    static boolean isAnnotationPresent(Element element, CharSequence annotationClassName) {\n-        return findAnnotation(element, annotationClassName) != null ||\n-                findMetaAnnotation(element, annotationClassName) != null;\n-    }\n-\n-    static <T> T getAttribute(AnnotationMirror annotation, String attributeName) {\n-        return annotation == null ? null : getAttribute(annotation.getElementValues(), attributeName);\n-    }\n-\n-    static <T> T getAttribute(Map<? extends ExecutableElement, ? extends AnnotationValue> attributesMap,\n-                              String attributeName) {\n-        T annotationValue = null;\n-        for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : attributesMap.entrySet()) {\n-            ExecutableElement attributeMethod = entry.getKey();\n-            if (Objects.equals(attributeName, attributeMethod.getSimpleName().toString())) {\n-                TypeMirror attributeType = attributeMethod.getReturnType();\n-                AnnotationValue value = entry.getValue();\n-                if (attributeType instanceof ArrayType) { // array-typed attribute values\n-                    ArrayType arrayType = (ArrayType) attributeType;\n-                    String componentType = arrayType.getComponentType().toString();\n-                    ClassLoader classLoader = AnnotationUtils.class.getClassLoader();\n-                    List<AnnotationValue> values = (List<AnnotationValue>) value.getValue();\n-                    int size = values.size();\n-                    try {\n-                        Class componentClass = classLoader.loadClass(componentType);\n-                        boolean isEnum = componentClass.isEnum();\n-                        Object array = Array.newInstance(componentClass, values.size());\n-                        for (int i = 0; i < size; i++) {\n-                            Object element = values.get(i).getValue();\n-                            if (isEnum) {\n-                                element = valueOf(componentClass, element.toString());\n-                            }\n-                            Array.set(array, i, element);\n-                        }\n-                        annotationValue = (T) array;\n-                    } catch (ClassNotFoundException e) {\n-                        throw new RuntimeException(e);\n-                    }\n-                } else {\n-                    annotationValue = (T) value.getValue();\n-                }\n-                break;\n-            }\n-        }\n-        return annotationValue;\n-    }\n-\n-    static <T> T getValue(AnnotationMirror annotation) {\n-        return (T) getAttribute(annotation, \"value\");\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.metadata.annotation.processing.util;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.AnnotatedConstruct;\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.AnnotationValue;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.type.ArrayType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Array;\r\n+import java.lang.reflect.Type;\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+import java.util.function.Predicate;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.lang.Enum.valueOf;\r\n+import static java.util.Collections.emptyList;\r\n+import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getType;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isSameType;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isTypeElement;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofTypeElement;\r\n+\r\n+/**\r\n+ * The utilities class for annotation in the package \"javax.lang.model.*\"\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface AnnotationUtils {\r\n+\r\n+    static AnnotationMirror getAnnotation(AnnotatedConstruct annotatedConstruct,\r\n+                                          Class<? extends Annotation> annotationClass) {\r\n+        return annotationClass == null ?\r\n+                null :\r\n+                getAnnotation(annotatedConstruct, annotationClass.getTypeName());\r\n+    }\r\n+\r\n+    static AnnotationMirror getAnnotation(AnnotatedConstruct annotatedConstruct, CharSequence annotationClassName) {\r\n+        List<AnnotationMirror> annotations = getAnnotations(annotatedConstruct, annotationClassName);\r\n+        return annotations.isEmpty() ? null : annotations.get(0);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct, Class<? extends Annotation> annotationClass) {\r\n+        return annotationClass == null ?\r\n+                emptyList() :\r\n+                getAnnotations(annotatedConstruct, annotationClass.getTypeName());\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct,\r\n+                                                 CharSequence annotationClassName) {\r\n+        return getAnnotations(annotatedConstruct,\r\n+                annotation -> isSameType(annotation.getAnnotationType(), annotationClassName));\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct) {\r\n+        return getAnnotations(annotatedConstruct, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct,\r\n+                                                 Predicate<AnnotationMirror>... annotationFilters) {\r\n+\r\n+        AnnotatedConstruct actualAnnotatedConstruct = annotatedConstruct;\r\n+\r\n+        if (annotatedConstruct instanceof TypeMirror) {\r\n+            actualAnnotatedConstruct = ofTypeElement((TypeMirror) actualAnnotatedConstruct);\r\n+        }\r\n+\r\n+        return actualAnnotatedConstruct == null ?\r\n+                emptyList() :\r\n+                filterAll((List<AnnotationMirror>) actualAnnotatedConstruct.getAnnotationMirrors(), annotationFilters);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(TypeMirror type) {\r\n+        return getAllAnnotations(ofTypeElement(type));\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(Element element) {\r\n+        return getAllAnnotations(element, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, Class<? extends Annotation> annotationClass) {\r\n+        return getAllAnnotations(ofTypeElement(type), annotationClass);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(Element element, Class<? extends Annotation> annotationClass) {\r\n+        return element == null || annotationClass == null ?\r\n+                emptyList() :\r\n+                getAllAnnotations(element, annotationClass.getTypeName());\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, CharSequence annotationClassName) {\r\n+        return getAllAnnotations(ofTypeElement(type), annotationClassName);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(Element element, CharSequence annotationClassName) {\r\n+        return getAllAnnotations(element, annotation -> isSameType(annotation.getAnnotationType(), annotationClassName));\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, Predicate<AnnotationMirror>... annotationFilters) {\r\n+        return getAllAnnotations(ofTypeElement(type), annotationFilters);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(Element element, Predicate<AnnotationMirror>... annotationFilters) {\r\n+\r\n+        List<AnnotationMirror> allAnnotations = isTypeElement(element) ?\r\n+                getHierarchicalTypes(ofTypeElement(element))\r\n+                        .stream()\r\n+                        .map(AnnotationUtils::getAnnotations)\r\n+                        .flatMap(Collection::stream)\r\n+                        .collect(Collectors.toList()) :\r\n+                element == null ? emptyList() : (List<AnnotationMirror>) element.getAnnotationMirrors();\r\n+\r\n+        return filterAll(allAnnotations, annotationFilters);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, Type annotatedType) {\r\n+        return getAllAnnotations(processingEnv, annotatedType, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, Type annotatedType,\r\n+                                                    Predicate<AnnotationMirror>... annotationFilters) {\r\n+        return annotatedType == null ?\r\n+                emptyList() :\r\n+                getAllAnnotations(processingEnv, annotatedType.getTypeName(), annotationFilters);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, CharSequence annotatedTypeName,\r\n+                                                    Predicate<AnnotationMirror>... annotationFilters) {\r\n+        return getAllAnnotations(getType(processingEnv, annotatedTypeName), annotationFilters);\r\n+    }\r\n+\r\n+    static AnnotationMirror findAnnotation(TypeMirror type, Class<? extends Annotation> annotationClass) {\r\n+        return annotationClass == null ? null : findAnnotation(type, annotationClass.getTypeName());\r\n+    }\r\n+\r\n+    static AnnotationMirror findAnnotation(TypeMirror type, CharSequence annotationClassName) {\r\n+        return findAnnotation(ofTypeElement(type), annotationClassName);\r\n+    }\r\n+\r\n+    static AnnotationMirror findAnnotation(Element element, Class<? extends Annotation> annotationClass) {\r\n+        return annotationClass == null ? null : findAnnotation(element, annotationClass.getTypeName());\r\n+    }\r\n+\r\n+    static AnnotationMirror findAnnotation(Element element, CharSequence annotationClassName) {\r\n+        return filterFirst(getAllAnnotations(element, annotation -> isSameType(annotation.getAnnotationType(), annotationClassName)));\r\n+    }\r\n+\r\n+    static AnnotationMirror findMetaAnnotation(Element annotatedConstruct, CharSequence metaAnnotationClassName) {\r\n+        return annotatedConstruct == null ?\r\n+                null :\r\n+                getAnnotations(annotatedConstruct)\r\n+                        .stream()\r\n+                        .map(annotation -> findAnnotation(annotation.getAnnotationType(), metaAnnotationClassName))\r\n+                        .filter(Objects::nonNull)\r\n+                        .findFirst()\r\n+                        .orElse(null);\r\n+    }\r\n+\r\n+    static boolean isAnnotationPresent(Element element, CharSequence annotationClassName) {\r\n+        return findAnnotation(element, annotationClassName) != null ||\r\n+                findMetaAnnotation(element, annotationClassName) != null;\r\n+    }\r\n+\r\n+    static <T> T getAttribute(AnnotationMirror annotation, String attributeName) {\r\n+        return annotation == null ? null : getAttribute(annotation.getElementValues(), attributeName);\r\n+    }\r\n+\r\n+    static <T> T getAttribute(Map<? extends ExecutableElement, ? extends AnnotationValue> attributesMap,\r\n+                              String attributeName) {\r\n+        T annotationValue = null;\r\n+        for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : attributesMap.entrySet()) {\r\n+            ExecutableElement attributeMethod = entry.getKey();\r\n+            if (Objects.equals(attributeName, attributeMethod.getSimpleName().toString())) {\r\n+                TypeMirror attributeType = attributeMethod.getReturnType();\r\n+                AnnotationValue value = entry.getValue();\r\n+                if (attributeType instanceof ArrayType) { // array-typed attribute values\r\n+                    ArrayType arrayType = (ArrayType) attributeType;\r\n+                    String componentType = arrayType.getComponentType().toString();\r\n+                    ClassLoader classLoader = AnnotationUtils.class.getClassLoader();\r\n+                    List<AnnotationValue> values = (List<AnnotationValue>) value.getValue();\r\n+                    int size = values.size();\r\n+                    try {\r\n+                        Class componentClass = classLoader.loadClass(componentType);\r\n+                        boolean isEnum = componentClass.isEnum();\r\n+                        Object array = Array.newInstance(componentClass, values.size());\r\n+                        for (int i = 0; i < size; i++) {\r\n+                            Object element = values.get(i).getValue();\r\n+                            if (isEnum) {\r\n+                                element = valueOf(componentClass, element.toString());\r\n+                            }\r\n+                            Array.set(array, i, element);\r\n+                        }\r\n+                        annotationValue = (T) array;\r\n+                    } catch (ClassNotFoundException e) {\r\n+                        throw new RuntimeException(e);\r\n+                    }\r\n+                } else {\r\n+                    annotationValue = (T) value.getValue();\r\n+                }\r\n+                break;\r\n+            }\r\n+        }\r\n+        return annotationValue;\r\n+    }\r\n+\r\n+    static <T> T getValue(AnnotationMirror annotation) {\r\n+        return (T) getAttribute(annotation, \"value\");\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/ExecutableElementComparator.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/ExecutableElementComparator.java", "comments": ["Ordering 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.metadata.annotation.processing.util;\n-\n-import org.apache.dubbo.common.utils.CharSequenceComparator;\n-\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-import java.util.Comparator;\n-import java.util.List;\n-\n-/**\n- * The Comparator class for {@link ExecutableElement}, the comparison rule :\n- * <ol>\n- *     <li>Comparing to two {@link ExecutableElement#getSimpleName() element names} {@link String#compareTo(String) lexicographically}.\n- *     If equals, go to step 2</li>\n- *     <li>Comparing to the count of two parameters. If equals, go to step 3</li>\n- *     <li>Comparing to the type names of parameters {@link String#compareTo(String) lexicographically}</li>\n- * </ol>\n- *\n- * @since 2.7.6\n- */\n-public class ExecutableElementComparator implements Comparator<ExecutableElement> {\n-\n-    public final static ExecutableElementComparator INSTANCE = new ExecutableElementComparator();\n-\n-    private ExecutableElementComparator() {\n-    }\n-\n-    @Override\n-    public int compare(ExecutableElement e1, ExecutableElement e2) {\n-\n-        if (e1.equals(e2)) {\n-            return 0;\n-        }\n-\n-        // Step 1\n-        int value = CharSequenceComparator.INSTANCE.compare(e1.getSimpleName(), e2.getSimpleName());\n-\n-        if (value == 0) { // Step 2\n-\n-            List<? extends VariableElement> ps1 = e1.getParameters();\n-            List<? extends VariableElement> ps2 = e1.getParameters();\n-\n-            value = ps1.size() - ps2.size();\n-\n-            if (value == 0) { // Step 3\n-                for (int i = 0; i < ps1.size(); i++) {\n-                    value = CharSequenceComparator.INSTANCE.compare(ps1.get(i).getSimpleName(), ps2.get(i).getSimpleName());\n-                    if (value != 0) {\n-                        break;\n-                    }\n-                }\n-            }\n-        }\n-        return Integer.compare(value, 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.metadata.annotation.processing.util;\r\n+\r\n+import org.apache.dubbo.common.utils.CharSequenceComparator;\r\n+\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import java.util.Comparator;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * The Comparator class for {@link ExecutableElement}, the comparison rule :\r\n+ * <ol>\r\n+ *     <li>Comparing to two {@link ExecutableElement#getSimpleName() element names} {@link String#compareTo(String) lexicographically}.\r\n+ *     If equals, go to step 2</li>\r\n+ *     <li>Comparing to the count of two parameters. If equals, go to step 3</li>\r\n+ *     <li>Comparing to the type names of parameters {@link String#compareTo(String) lexicographically}</li>\r\n+ * </ol>\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ExecutableElementComparator implements Comparator<ExecutableElement> {\r\n+\r\n+    public final static ExecutableElementComparator INSTANCE = new ExecutableElementComparator();\r\n+\r\n+    private ExecutableElementComparator() {\r\n+    }\r\n+\r\n+    @Override\r\n+    public int compare(ExecutableElement e1, ExecutableElement e2) {\r\n+\r\n+        if (e1.equals(e2)) {\r\n+            return 0;\r\n+        }\r\n+\r\n+        // Step 1\r\n+        int value = CharSequenceComparator.INSTANCE.compare(e1.getSimpleName(), e2.getSimpleName());\r\n+\r\n+        if (value == 0) { // Step 2\r\n+\r\n+            List<? extends VariableElement> ps1 = e1.getParameters();\r\n+            List<? extends VariableElement> ps2 = e1.getParameters();\r\n+\r\n+            value = ps1.size() - ps2.size();\r\n+\r\n+            if (value == 0) { // Step 3\r\n+                for (int i = 0; i < ps1.size(); i++) {\r\n+                    value = CharSequenceComparator.INSTANCE.compare(ps1.get(i).getSimpleName(), ps2.get(i).getSimpleName());\r\n+                    if (value != 0) {\r\n+                        break;\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+        return Integer.compare(value, 0);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/FieldUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/FieldUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,146 +1,146 @@\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.metadata.annotation.processing.util;\n-\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.Modifier;\n-import javax.lang.model.element.VariableElement;\n-import javax.lang.model.type.TypeMirror;\n-import java.util.Collection;\n-import java.util.List;\n-import java.util.function.Predicate;\n-import java.util.stream.Collectors;\n-\n-import static java.util.Collections.emptyList;\n-import static javax.lang.model.element.ElementKind.ENUM_CONSTANT;\n-import static javax.lang.model.element.ElementKind.FIELD;\n-import static javax.lang.model.element.Modifier.STATIC;\n-import static javax.lang.model.util.ElementFilter.fieldsIn;\n-import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.getDeclaredMembers;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.hasModifiers;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.matches;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isEnumType;\n-\n-/**\n- * The utilities class for the field in the package \"javax.lang.model.\"\n- *\n- * @since 2.7.6\n- */\n-public interface FieldUtils {\n-\n-    static List<VariableElement> getDeclaredFields(Element element, Predicate<VariableElement>... fieldFilters) {\n-        return element == null ? emptyList() : getDeclaredFields(element.asType(), fieldFilters);\n-    }\n-\n-    static List<VariableElement> getDeclaredFields(Element element) {\n-        return getDeclaredFields(element, EMPTY_ARRAY);\n-    }\n-\n-    static List<VariableElement> getDeclaredFields(TypeMirror type, Predicate<VariableElement>... fieldFilters) {\n-        return filterAll(fieldsIn(getDeclaredMembers(type)), fieldFilters);\n-    }\n-\n-    static List<VariableElement> getDeclaredFields(TypeMirror type) {\n-        return getDeclaredFields(type, EMPTY_ARRAY);\n-    }\n-\n-    static List<VariableElement> getAllDeclaredFields(Element element, Predicate<VariableElement>... fieldFilters) {\n-        return element == null ? emptyList() : getAllDeclaredFields(element.asType(), fieldFilters);\n-    }\n-\n-    static List<VariableElement> getAllDeclaredFields(Element element) {\n-        return getAllDeclaredFields(element, EMPTY_ARRAY);\n-    }\n-\n-    static List<VariableElement> getAllDeclaredFields(TypeMirror type, Predicate<VariableElement>... fieldFilters) {\n-        return getHierarchicalTypes(type)\n-                .stream()\n-                .map(t -> getDeclaredFields(t, fieldFilters))\n-                .flatMap(Collection::stream)\n-                .collect(Collectors.toList());\n-    }\n-\n-    static List<VariableElement> getAllDeclaredFields(TypeMirror type) {\n-        return getAllDeclaredFields(type, EMPTY_ARRAY);\n-    }\n-\n-    static VariableElement getDeclaredField(Element element, String fieldName) {\n-        return element == null ? null : getDeclaredField(element.asType(), fieldName);\n-    }\n-\n-    static VariableElement getDeclaredField(TypeMirror type, String fieldName) {\n-        return filterFirst(getDeclaredFields(type, field -> fieldName.equals(field.getSimpleName().toString())));\n-    }\n-\n-    static VariableElement findField(Element element, String fieldName) {\n-        return element == null ? null : findField(element.asType(), fieldName);\n-    }\n-\n-    static VariableElement findField(TypeMirror type, String fieldName) {\n-        return filterFirst(getAllDeclaredFields(type, field -> equals(field, fieldName)));\n-    }\n-\n-    /**\n-     * is Enum's member field or not\n-     *\n-     * @param field {@link VariableElement} must be public static final fields\n-     * @return if field is public static final, return <code>true</code>, or <code>false</code>\n-     */\n-    static boolean isEnumMemberField(VariableElement field) {\n-        if (field == null || !isEnumType(field.getEnclosingElement())) {\n-            return false;\n-        }\n-        return ENUM_CONSTANT.equals(field.getKind());\n-    }\n-\n-    static boolean isNonStaticField(VariableElement field) {\n-        return isField(field) && !hasModifiers(field, STATIC);\n-    }\n-\n-    static boolean isField(VariableElement field) {\n-        return matches(field, FIELD) || isEnumMemberField(field);\n-    }\n-\n-    static boolean isField(VariableElement field, Modifier... modifiers) {\n-        return isField(field) && hasModifiers(field, modifiers);\n-    }\n-\n-    static List<VariableElement> getNonStaticFields(TypeMirror type) {\n-        return getDeclaredFields(type, FieldUtils::isNonStaticField);\n-    }\n-\n-    static List<VariableElement> getNonStaticFields(Element element) {\n-        return element == null ? emptyList() : getNonStaticFields(element.asType());\n-    }\n-\n-    static List<VariableElement> getAllNonStaticFields(TypeMirror type) {\n-        return getAllDeclaredFields(type, FieldUtils::isNonStaticField);\n-    }\n-\n-    static List<VariableElement> getAllNonStaticFields(Element element) {\n-        return element == null ? emptyList() : getAllNonStaticFields(element.asType());\n-    }\n-\n-    static boolean equals(VariableElement field, CharSequence fieldName) {\n-        return field != null && fieldName != null && field.getSimpleName().toString().equals(fieldName.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.metadata.annotation.processing.util;\r\n+\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.Modifier;\r\n+import javax.lang.model.element.VariableElement;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+import java.util.function.Predicate;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.util.Collections.emptyList;\r\n+import static javax.lang.model.element.ElementKind.ENUM_CONSTANT;\r\n+import static javax.lang.model.element.ElementKind.FIELD;\r\n+import static javax.lang.model.element.Modifier.STATIC;\r\n+import static javax.lang.model.util.ElementFilter.fieldsIn;\r\n+import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.getDeclaredMembers;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.hasModifiers;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.matches;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isEnumType;\r\n+\r\n+/**\r\n+ * The utilities class for the field in the package \"javax.lang.model.\"\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface FieldUtils {\r\n+\r\n+    static List<VariableElement> getDeclaredFields(Element element, Predicate<VariableElement>... fieldFilters) {\r\n+        return element == null ? emptyList() : getDeclaredFields(element.asType(), fieldFilters);\r\n+    }\r\n+\r\n+    static List<VariableElement> getDeclaredFields(Element element) {\r\n+        return getDeclaredFields(element, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<VariableElement> getDeclaredFields(TypeMirror type, Predicate<VariableElement>... fieldFilters) {\r\n+        return filterAll(fieldsIn(getDeclaredMembers(type)), fieldFilters);\r\n+    }\r\n+\r\n+    static List<VariableElement> getDeclaredFields(TypeMirror type) {\r\n+        return getDeclaredFields(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllDeclaredFields(Element element, Predicate<VariableElement>... fieldFilters) {\r\n+        return element == null ? emptyList() : getAllDeclaredFields(element.asType(), fieldFilters);\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllDeclaredFields(Element element) {\r\n+        return getAllDeclaredFields(element, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllDeclaredFields(TypeMirror type, Predicate<VariableElement>... fieldFilters) {\r\n+        return getHierarchicalTypes(type)\r\n+                .stream()\r\n+                .map(t -> getDeclaredFields(t, fieldFilters))\r\n+                .flatMap(Collection::stream)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllDeclaredFields(TypeMirror type) {\r\n+        return getAllDeclaredFields(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static VariableElement getDeclaredField(Element element, String fieldName) {\r\n+        return element == null ? null : getDeclaredField(element.asType(), fieldName);\r\n+    }\r\n+\r\n+    static VariableElement getDeclaredField(TypeMirror type, String fieldName) {\r\n+        return filterFirst(getDeclaredFields(type, field -> fieldName.equals(field.getSimpleName().toString())));\r\n+    }\r\n+\r\n+    static VariableElement findField(Element element, String fieldName) {\r\n+        return element == null ? null : findField(element.asType(), fieldName);\r\n+    }\r\n+\r\n+    static VariableElement findField(TypeMirror type, String fieldName) {\r\n+        return filterFirst(getAllDeclaredFields(type, field -> equals(field, fieldName)));\r\n+    }\r\n+\r\n+    /**\r\n+     * is Enum's member field or not\r\n+     *\r\n+     * @param field {@link VariableElement} must be public static final fields\r\n+     * @return if field is public static final, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    static boolean isEnumMemberField(VariableElement field) {\r\n+        if (field == null || !isEnumType(field.getEnclosingElement())) {\r\n+            return false;\r\n+        }\r\n+        return ENUM_CONSTANT.equals(field.getKind());\r\n+    }\r\n+\r\n+    static boolean isNonStaticField(VariableElement field) {\r\n+        return isField(field) && !hasModifiers(field, STATIC);\r\n+    }\r\n+\r\n+    static boolean isField(VariableElement field) {\r\n+        return matches(field, FIELD) || isEnumMemberField(field);\r\n+    }\r\n+\r\n+    static boolean isField(VariableElement field, Modifier... modifiers) {\r\n+        return isField(field) && hasModifiers(field, modifiers);\r\n+    }\r\n+\r\n+    static List<VariableElement> getNonStaticFields(TypeMirror type) {\r\n+        return getDeclaredFields(type, FieldUtils::isNonStaticField);\r\n+    }\r\n+\r\n+    static List<VariableElement> getNonStaticFields(Element element) {\r\n+        return element == null ? emptyList() : getNonStaticFields(element.asType());\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllNonStaticFields(TypeMirror type) {\r\n+        return getAllDeclaredFields(type, FieldUtils::isNonStaticField);\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllNonStaticFields(Element element) {\r\n+        return element == null ? emptyList() : getAllNonStaticFields(element.asType());\r\n+    }\r\n+\r\n+    static boolean equals(VariableElement field, CharSequence fieldName) {\r\n+        return field != null && fieldName != null && field.getSimpleName().toString().equals(fieldName.toString());\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/LoggerUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/LoggerUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,45 +1,45 @@\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.metadata.annotation.processing.util;\n-\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-\n-import static java.lang.String.format;\n-\n-/**\n- * Logger Utils\n- *\n- * @since 2.7.6\n- */\n-public interface LoggerUtils {\n-\n-    Logger LOGGER = LoggerFactory.getLogger(\"dubbo-metadata-processor\");\n-\n-    static void info(String format, Object... args) {\n-        if (LOGGER.isInfoEnabled()) {\n-            LOGGER.info(format(format, args));\n-        }\n-    }\n-\n-    static void warn(String format, Object... args) {\n-        if (LOGGER.isWarnEnabled()) {\n-            LOGGER.warn(format(format, args));\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.metadata.annotation.processing.util;\r\n+\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+\r\n+import static java.lang.String.format;\r\n+\r\n+/**\r\n+ * Logger Utils\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface LoggerUtils {\r\n+\r\n+    Logger LOGGER = LoggerFactory.getLogger(\"dubbo-metadata-processor\");\r\n+\r\n+    static void info(String format, Object... args) {\r\n+        if (LOGGER.isInfoEnabled()) {\r\n+            LOGGER.info(format(format, args));\r\n+        }\r\n+    }\r\n+\r\n+    static void warn(String format, Object... args) {\r\n+        if (LOGGER.isWarnEnabled()) {\r\n+            LOGGER.warn(format(format, args));\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/MemberUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/MemberUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,94 +1,94 @@\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.metadata.annotation.processing.util;\n-\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.ElementKind;\n-import javax.lang.model.element.Modifier;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.element.VariableElement;\n-import javax.lang.model.type.TypeMirror;\n-import java.util.Collection;\n-import java.util.List;\n-import java.util.Objects;\n-import java.util.Set;\n-import java.util.stream.Collectors;\n-\n-import static java.util.Collections.emptyList;\n-import static javax.lang.model.element.Modifier.PUBLIC;\n-import static javax.lang.model.element.Modifier.STATIC;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofTypeElement;\n-\n-/**\n- * The utilities class for the members in the package \"javax.lang.model.\", such as \"field\", \"method\", \"constructor\"\n- *\n- * @since 2.7.6\n- */\n-public interface MemberUtils {\n-\n-    static boolean matches(Element member, ElementKind kind) {\n-        return member == null || kind == null ? false : kind.equals(member.getKind());\n-    }\n-\n-    static boolean isPublicNonStatic(Element member) {\n-        return hasModifiers(member, PUBLIC) && !hasModifiers(member, STATIC);\n-    }\n-\n-    static boolean hasModifiers(Element member, Modifier... modifiers) {\n-        if (member == null || modifiers == null) {\n-            return false;\n-        }\n-        Set<Modifier> actualModifiers = member.getModifiers();\n-        for (Modifier modifier : modifiers) {\n-            if (!actualModifiers.contains(modifier)) {\n-                return false;\n-            }\n-        }\n-        return true;\n-    }\n-\n-    static List<? extends Element> getDeclaredMembers(TypeMirror type) {\n-        TypeElement element = ofTypeElement(type);\n-        return element == null ? emptyList() : element.getEnclosedElements();\n-    }\n-\n-    static List<? extends Element> getAllDeclaredMembers(TypeMirror type) {\n-        return getHierarchicalTypes(type)\n-                .stream()\n-                .map(MemberUtils::getDeclaredMembers)\n-                .flatMap(Collection::stream)\n-                .collect(Collectors.toList());\n-    }\n-\n-    static boolean matchParameterTypes(List<? extends VariableElement> parameters, CharSequence... parameterTypes) {\n-\n-        int size = parameters.size();\n-\n-        if (size != parameterTypes.length) {\n-            return false;\n-        }\n-\n-        for (int i = 0; i < size; i++) {\n-            VariableElement parameter = parameters.get(i);\n-            if (!Objects.equals(parameter.asType().toString(), parameterTypes[i])) {\n-                return false;\n-            }\n-        }\n-        return true;\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.metadata.annotation.processing.util;\r\n+\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.ElementKind;\r\n+import javax.lang.model.element.Modifier;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.util.Collections.emptyList;\r\n+import static javax.lang.model.element.Modifier.PUBLIC;\r\n+import static javax.lang.model.element.Modifier.STATIC;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofTypeElement;\r\n+\r\n+/**\r\n+ * The utilities class for the members in the package \"javax.lang.model.\", such as \"field\", \"method\", \"constructor\"\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface MemberUtils {\r\n+\r\n+    static boolean matches(Element member, ElementKind kind) {\r\n+        return member == null || kind == null ? false : kind.equals(member.getKind());\r\n+    }\r\n+\r\n+    static boolean isPublicNonStatic(Element member) {\r\n+        return hasModifiers(member, PUBLIC) && !hasModifiers(member, STATIC);\r\n+    }\r\n+\r\n+    static boolean hasModifiers(Element member, Modifier... modifiers) {\r\n+        if (member == null || modifiers == null) {\r\n+            return false;\r\n+        }\r\n+        Set<Modifier> actualModifiers = member.getModifiers();\r\n+        for (Modifier modifier : modifiers) {\r\n+            if (!actualModifiers.contains(modifier)) {\r\n+                return false;\r\n+            }\r\n+        }\r\n+        return true;\r\n+    }\r\n+\r\n+    static List<? extends Element> getDeclaredMembers(TypeMirror type) {\r\n+        TypeElement element = ofTypeElement(type);\r\n+        return element == null ? emptyList() : element.getEnclosedElements();\r\n+    }\r\n+\r\n+    static List<? extends Element> getAllDeclaredMembers(TypeMirror type) {\r\n+        return getHierarchicalTypes(type)\r\n+                .stream()\r\n+                .map(MemberUtils::getDeclaredMembers)\r\n+                .flatMap(Collection::stream)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+\r\n+    static boolean matchParameterTypes(List<? extends VariableElement> parameters, CharSequence... parameterTypes) {\r\n+\r\n+        int size = parameters.size();\r\n+\r\n+        if (size != parameterTypes.length) {\r\n+            return false;\r\n+        }\r\n+\r\n+        for (int i = 0; i < size; i++) {\r\n+            VariableElement parameter = parameters.get(i);\r\n+            if (!Objects.equals(parameter.asType().toString(), parameterTypes[i])) {\r\n+                return false;\r\n+            }\r\n+        }\r\n+        return true;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/MethodUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/MethodUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,156 +1,156 @@\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.metadata.annotation.processing.util;\n-\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.element.VariableElement;\n-import javax.lang.model.type.TypeMirror;\n-import javax.lang.model.util.Elements;\n-import java.lang.reflect.Type;\n-import java.util.Collection;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.function.Predicate;\n-import java.util.stream.Collectors;\n-\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.emptyList;\n-import static javax.lang.model.element.ElementKind.METHOD;\n-import static javax.lang.model.util.ElementFilter.methodsIn;\n-import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\n-import static org.apache.dubbo.common.function.Streams.filter;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.getDeclaredMembers;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.isPublicNonStatic;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.matchParameterTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofDeclaredType;\n-\n-/**\n- * The utilities class for method in the package \"javax.lang.model.\"\n- *\n- * @since 2.7.6\n- */\n-public interface MethodUtils {\n-\n-    static List<ExecutableElement> getDeclaredMethods(TypeElement type, Predicate<ExecutableElement>... methodFilters) {\n-        return type == null ? emptyList() : getDeclaredMethods(type.asType(), methodFilters);\n-    }\n-\n-    static List<ExecutableElement> getDeclaredMethods(TypeMirror type, Predicate<ExecutableElement>... methodFilters) {\n-        return filterAll(methodsIn(getDeclaredMembers(type)), methodFilters);\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type, Predicate<ExecutableElement>... methodFilters) {\n-        return type == null ? emptyList() : getAllDeclaredMethods(type.asType(), methodFilters);\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type) {\n-        return getAllDeclaredMethods(type, EMPTY_ARRAY);\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type, Predicate<ExecutableElement>... methodFilters) {\n-        return getHierarchicalTypes(type)\n-                .stream()\n-                .map(t -> getDeclaredMethods(t, methodFilters))\n-                .flatMap(Collection::stream)\n-                .collect(Collectors.toList());\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type) {\n-        return getAllDeclaredMethods(type, EMPTY_ARRAY);\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type, Type... excludedTypes) {\n-        return type == null ? emptyList() : getAllDeclaredMethods(type.asType(), excludedTypes);\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type, Type... excludedTypes) {\n-        return getHierarchicalTypes(type, excludedTypes)\n-                .stream()\n-                .map(t -> getDeclaredMethods(t))\n-                .flatMap(Collection::stream)\n-                .collect(Collectors.toList());\n-    }\n-\n-    static List<ExecutableElement> getPublicNonStaticMethods(TypeElement type, Type... excludedTypes) {\n-        return getPublicNonStaticMethods(ofDeclaredType(type), excludedTypes);\n-    }\n-\n-    static List<ExecutableElement> getPublicNonStaticMethods(TypeMirror type, Type... excludedTypes) {\n-        return filter(getAllDeclaredMethods(type, excludedTypes), MethodUtils::isPublicNonStaticMethod);\n-    }\n-\n-    static boolean isMethod(ExecutableElement method) {\n-        return method != null && METHOD.equals(method.getKind());\n-    }\n-\n-    static boolean isPublicNonStaticMethod(ExecutableElement method) {\n-        return isMethod(method) && isPublicNonStatic(method);\n-    }\n-\n-    static ExecutableElement findMethod(TypeElement type, String methodName, Type oneParameterType, Type... otherParameterTypes) {\n-        return type == null ? null : findMethod(type.asType(), methodName, oneParameterType, otherParameterTypes);\n-    }\n-\n-    static ExecutableElement findMethod(TypeMirror type, String methodName, Type oneParameterType, Type... otherParameterTypes) {\n-        List<Type> parameterTypes = new LinkedList<>();\n-        parameterTypes.add(oneParameterType);\n-        parameterTypes.addAll(asList(otherParameterTypes));\n-        return findMethod(type, methodName, parameterTypes.stream().map(Type::getTypeName).toArray(String[]::new));\n-    }\n-\n-    static ExecutableElement findMethod(TypeElement type, String methodName, CharSequence... parameterTypes) {\n-        return type == null ? null : findMethod(type.asType(), methodName, parameterTypes);\n-    }\n-\n-    static ExecutableElement findMethod(TypeMirror type, String methodName, CharSequence... parameterTypes) {\n-        return filterFirst(getAllDeclaredMethods(type),\n-                method -> methodName.equals(method.getSimpleName().toString()),\n-                method -> matchParameterTypes(method.getParameters(), parameterTypes)\n-        );\n-    }\n-\n-    static ExecutableElement getOverrideMethod(ProcessingEnvironment processingEnv, TypeElement type,\n-                                               ExecutableElement declaringMethod) {\n-        Elements elements = processingEnv.getElementUtils();\n-        return filterFirst(getAllDeclaredMethods(type), method -> elements.overrides(method, declaringMethod, type));\n-    }\n-\n-\n-    static String getMethodName(ExecutableElement method) {\n-        return method == null ? null : method.getSimpleName().toString();\n-    }\n-\n-    static String getReturnType(ExecutableElement method) {\n-        return method == null ? null : TypeUtils.toString(method.getReturnType());\n-    }\n-\n-    static String[] getMethodParameterTypes(ExecutableElement method) {\n-        return method == null ?\n-                new String[0] :\n-                method.getParameters()\n-                        .stream()\n-                        .map(VariableElement::asType)\n-                        .map(TypeUtils::toString)\n-                        .toArray(String[]::new);\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.metadata.annotation.processing.util;\r\n+\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import javax.lang.model.util.Elements;\r\n+import java.lang.reflect.Type;\r\n+import java.util.Collection;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.function.Predicate;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.emptyList;\r\n+import static javax.lang.model.element.ElementKind.METHOD;\r\n+import static javax.lang.model.util.ElementFilter.methodsIn;\r\n+import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\r\n+import static org.apache.dubbo.common.function.Streams.filter;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.getDeclaredMembers;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.isPublicNonStatic;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.matchParameterTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofDeclaredType;\r\n+\r\n+/**\r\n+ * The utilities class for method in the package \"javax.lang.model.\"\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface MethodUtils {\r\n+\r\n+    static List<ExecutableElement> getDeclaredMethods(TypeElement type, Predicate<ExecutableElement>... methodFilters) {\r\n+        return type == null ? emptyList() : getDeclaredMethods(type.asType(), methodFilters);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getDeclaredMethods(TypeMirror type, Predicate<ExecutableElement>... methodFilters) {\r\n+        return filterAll(methodsIn(getDeclaredMembers(type)), methodFilters);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type, Predicate<ExecutableElement>... methodFilters) {\r\n+        return type == null ? emptyList() : getAllDeclaredMethods(type.asType(), methodFilters);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type) {\r\n+        return getAllDeclaredMethods(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type, Predicate<ExecutableElement>... methodFilters) {\r\n+        return getHierarchicalTypes(type)\r\n+                .stream()\r\n+                .map(t -> getDeclaredMethods(t, methodFilters))\r\n+                .flatMap(Collection::stream)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type) {\r\n+        return getAllDeclaredMethods(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type, Type... excludedTypes) {\r\n+        return type == null ? emptyList() : getAllDeclaredMethods(type.asType(), excludedTypes);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type, Type... excludedTypes) {\r\n+        return getHierarchicalTypes(type, excludedTypes)\r\n+                .stream()\r\n+                .map(t -> getDeclaredMethods(t))\r\n+                .flatMap(Collection::stream)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getPublicNonStaticMethods(TypeElement type, Type... excludedTypes) {\r\n+        return getPublicNonStaticMethods(ofDeclaredType(type), excludedTypes);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getPublicNonStaticMethods(TypeMirror type, Type... excludedTypes) {\r\n+        return filter(getAllDeclaredMethods(type, excludedTypes), MethodUtils::isPublicNonStaticMethod);\r\n+    }\r\n+\r\n+    static boolean isMethod(ExecutableElement method) {\r\n+        return method != null && METHOD.equals(method.getKind());\r\n+    }\r\n+\r\n+    static boolean isPublicNonStaticMethod(ExecutableElement method) {\r\n+        return isMethod(method) && isPublicNonStatic(method);\r\n+    }\r\n+\r\n+    static ExecutableElement findMethod(TypeElement type, String methodName, Type oneParameterType, Type... otherParameterTypes) {\r\n+        return type == null ? null : findMethod(type.asType(), methodName, oneParameterType, otherParameterTypes);\r\n+    }\r\n+\r\n+    static ExecutableElement findMethod(TypeMirror type, String methodName, Type oneParameterType, Type... otherParameterTypes) {\r\n+        List<Type> parameterTypes = new LinkedList<>();\r\n+        parameterTypes.add(oneParameterType);\r\n+        parameterTypes.addAll(asList(otherParameterTypes));\r\n+        return findMethod(type, methodName, parameterTypes.stream().map(Type::getTypeName).toArray(String[]::new));\r\n+    }\r\n+\r\n+    static ExecutableElement findMethod(TypeElement type, String methodName, CharSequence... parameterTypes) {\r\n+        return type == null ? null : findMethod(type.asType(), methodName, parameterTypes);\r\n+    }\r\n+\r\n+    static ExecutableElement findMethod(TypeMirror type, String methodName, CharSequence... parameterTypes) {\r\n+        return filterFirst(getAllDeclaredMethods(type),\r\n+                method -> methodName.equals(method.getSimpleName().toString()),\r\n+                method -> matchParameterTypes(method.getParameters(), parameterTypes)\r\n+        );\r\n+    }\r\n+\r\n+    static ExecutableElement getOverrideMethod(ProcessingEnvironment processingEnv, TypeElement type,\r\n+                                               ExecutableElement declaringMethod) {\r\n+        Elements elements = processingEnv.getElementUtils();\r\n+        return filterFirst(getAllDeclaredMethods(type), method -> elements.overrides(method, declaringMethod, type));\r\n+    }\r\n+\r\n+\r\n+    static String getMethodName(ExecutableElement method) {\r\n+        return method == null ? null : method.getSimpleName().toString();\r\n+    }\r\n+\r\n+    static String getReturnType(ExecutableElement method) {\r\n+        return method == null ? null : TypeUtils.toString(method.getReturnType());\r\n+    }\r\n+\r\n+    static String[] getMethodParameterTypes(ExecutableElement method) {\r\n+        return method == null ?\r\n+                new String[0] :\r\n+                method.getParameters()\r\n+                        .stream()\r\n+                        .map(VariableElement::asType)\r\n+                        .map(TypeUtils::toString)\r\n+                        .toArray(String[]::new);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/ServiceAnnotationUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/ServiceAnnotationUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,137 +1,137 @@\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.metadata.annotation.processing.util;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.TypeElement;\n-import java.util.LinkedHashSet;\n-import java.util.Objects;\n-import java.util.Set;\n-\n-import static java.lang.String.valueOf;\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.unmodifiableSet;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\n-\n-/**\n- * The utilities class for @Service annotation\n- *\n- * @since 2.7.6\n- */\n-public interface ServiceAnnotationUtils {\n-\n-    /**\n-     * The class name of @Service\n-     *\n-     * @deprecated Recommend {@link #DUBBO_SERVICE_ANNOTATION_TYPE}\n-     */\n-    @Deprecated\n-    String SERVICE_ANNOTATION_TYPE = \"org.apache.dubbo.config.annotation.Service\";\n-\n-    /**\n-     * The class name of the legacy @Service\n-     *\n-     * @deprecated Recommend {@link #DUBBO_SERVICE_ANNOTATION_TYPE}\n-     */\n-    @Deprecated\n-    String LEGACY_SERVICE_ANNOTATION_TYPE = \"com.alibaba.dubbo.config.annotation.Service\";\n-\n-    /**\n-     * The class name of @DubboService\n-     *\n-     * @since 2.7.9\n-     */\n-    String DUBBO_SERVICE_ANNOTATION_TYPE = \"org.apache.dubbo.config.annotation.DubboService\";\n-\n-    /**\n-     * the attribute name of @Service.interfaceClass()\n-     */\n-    String INTERFACE_CLASS_ATTRIBUTE_NAME = \"interfaceClass\";\n-\n-    /**\n-     * the attribute name of @Service.interfaceName()\n-     */\n-    String INTERFACE_NAME_ATTRIBUTE_NAME = \"interfaceName\";\n-\n-    /**\n-     * the attribute name of @Service.group()\n-     */\n-    String GROUP_ATTRIBUTE_NAME = \"group\";\n-\n-    /**\n-     * the attribute name of @Service.version()\n-     */\n-    String VERSION_ATTRIBUTE_NAME = \"version\";\n-\n-    Set<String> SUPPORTED_ANNOTATION_TYPES = unmodifiableSet(new LinkedHashSet<>(asList(DUBBO_SERVICE_ANNOTATION_TYPE, SERVICE_ANNOTATION_TYPE, LEGACY_SERVICE_ANNOTATION_TYPE)));\n-\n-    static boolean isServiceAnnotationPresent(TypeElement annotatedType) {\n-        return SUPPORTED_ANNOTATION_TYPES.stream()\n-                .filter(type -> isAnnotationPresent(annotatedType, type))\n-                .findFirst()\n-                .isPresent();\n-    }\n-\n-    static AnnotationMirror getAnnotation(TypeElement annotatedClass) {\n-        return getAnnotation(annotatedClass.getAnnotationMirrors());\n-    }\n-\n-    static AnnotationMirror getAnnotation(Iterable<? extends AnnotationMirror> annotationMirrors) {\n-        AnnotationMirror matchedAnnotationMirror = null;\n-\n-        MAIN:\n-        for (String supportedAnnotationType : SUPPORTED_ANNOTATION_TYPES) { // Prioritized\n-            for (AnnotationMirror annotationMirror : annotationMirrors) {\n-                String annotationType = annotationMirror.getAnnotationType().toString();\n-                if (Objects.equals(supportedAnnotationType, annotationType)) {\n-                    matchedAnnotationMirror = annotationMirror;\n-                    break MAIN;\n-                }\n-            }\n-        }\n-\n-        if (matchedAnnotationMirror == null) {\n-            throw new IllegalArgumentException(\"The annotated element must be annotated any of \" + SUPPORTED_ANNOTATION_TYPES);\n-        }\n-\n-        return matchedAnnotationMirror;\n-    }\n-\n-    static String resolveServiceInterfaceName(TypeElement annotatedClass, AnnotationMirror serviceAnnotation) {\n-        Object interfaceClass = getAttribute(serviceAnnotation, INTERFACE_CLASS_ATTRIBUTE_NAME);\n-\n-        if (interfaceClass == null) { // try to find the \"interfaceName\" attribute\n-            interfaceClass = getAttribute(serviceAnnotation, INTERFACE_NAME_ATTRIBUTE_NAME);\n-        }\n-\n-        if (interfaceClass == null) {\n-            // last, get the interface class from first one\n-            interfaceClass = ((TypeElement) annotatedClass).getInterfaces().get(0);\n-        }\n-\n-        return valueOf(interfaceClass);\n-    }\n-\n-    static String getGroup(AnnotationMirror serviceAnnotation) {\n-        return getAttribute(serviceAnnotation, GROUP_ATTRIBUTE_NAME);\n-    }\n-\n-    static String getVersion(AnnotationMirror serviceAnnotation) {\n-        return getAttribute(serviceAnnotation, VERSION_ATTRIBUTE_NAME);\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.metadata.annotation.processing.util;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.TypeElement;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.unmodifiableSet;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\r\n+\r\n+/**\r\n+ * The utilities class for @Service annotation\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface ServiceAnnotationUtils {\r\n+\r\n+    /**\r\n+     * The class name of @Service\r\n+     *\r\n+     * @deprecated Recommend {@link #DUBBO_SERVICE_ANNOTATION_TYPE}\r\n+     */\r\n+    @Deprecated\r\n+    String SERVICE_ANNOTATION_TYPE = \"org.apache.dubbo.config.annotation.Service\";\r\n+\r\n+    /**\r\n+     * The class name of the legacy @Service\r\n+     *\r\n+     * @deprecated Recommend {@link #DUBBO_SERVICE_ANNOTATION_TYPE}\r\n+     */\r\n+    @Deprecated\r\n+    String LEGACY_SERVICE_ANNOTATION_TYPE = \"com.alibaba.dubbo.config.annotation.Service\";\r\n+\r\n+    /**\r\n+     * The class name of @DubboService\r\n+     *\r\n+     * @since 2.7.9\r\n+     */\r\n+    String DUBBO_SERVICE_ANNOTATION_TYPE = \"org.apache.dubbo.config.annotation.DubboService\";\r\n+\r\n+    /**\r\n+     * the attribute name of @Service.interfaceClass()\r\n+     */\r\n+    String INTERFACE_CLASS_ATTRIBUTE_NAME = \"interfaceClass\";\r\n+\r\n+    /**\r\n+     * the attribute name of @Service.interfaceName()\r\n+     */\r\n+    String INTERFACE_NAME_ATTRIBUTE_NAME = \"interfaceName\";\r\n+\r\n+    /**\r\n+     * the attribute name of @Service.group()\r\n+     */\r\n+    String GROUP_ATTRIBUTE_NAME = \"group\";\r\n+\r\n+    /**\r\n+     * the attribute name of @Service.version()\r\n+     */\r\n+    String VERSION_ATTRIBUTE_NAME = \"version\";\r\n+\r\n+    Set<String> SUPPORTED_ANNOTATION_TYPES = unmodifiableSet(new LinkedHashSet<>(asList(DUBBO_SERVICE_ANNOTATION_TYPE, SERVICE_ANNOTATION_TYPE, LEGACY_SERVICE_ANNOTATION_TYPE)));\r\n+\r\n+    static boolean isServiceAnnotationPresent(TypeElement annotatedType) {\r\n+        return SUPPORTED_ANNOTATION_TYPES.stream()\r\n+                .filter(type -> isAnnotationPresent(annotatedType, type))\r\n+                .findFirst()\r\n+                .isPresent();\r\n+    }\r\n+\r\n+    static AnnotationMirror getAnnotation(TypeElement annotatedClass) {\r\n+        return getAnnotation(annotatedClass.getAnnotationMirrors());\r\n+    }\r\n+\r\n+    static AnnotationMirror getAnnotation(Iterable<? extends AnnotationMirror> annotationMirrors) {\r\n+        AnnotationMirror matchedAnnotationMirror = null;\r\n+\r\n+        MAIN:\r\n+        for (String supportedAnnotationType : SUPPORTED_ANNOTATION_TYPES) { // Prioritized\r\n+            for (AnnotationMirror annotationMirror : annotationMirrors) {\r\n+                String annotationType = annotationMirror.getAnnotationType().toString();\r\n+                if (Objects.equals(supportedAnnotationType, annotationType)) {\r\n+                    matchedAnnotationMirror = annotationMirror;\r\n+                    break MAIN;\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        if (matchedAnnotationMirror == null) {\r\n+            throw new IllegalArgumentException(\"The annotated element must be annotated any of \" + SUPPORTED_ANNOTATION_TYPES);\r\n+        }\r\n+\r\n+        return matchedAnnotationMirror;\r\n+    }\r\n+\r\n+    static String resolveServiceInterfaceName(TypeElement annotatedClass, AnnotationMirror serviceAnnotation) {\r\n+        Object interfaceClass = getAttribute(serviceAnnotation, INTERFACE_CLASS_ATTRIBUTE_NAME);\r\n+\r\n+        if (interfaceClass == null) { // try to find the \"interfaceName\" attribute\r\n+            interfaceClass = getAttribute(serviceAnnotation, INTERFACE_NAME_ATTRIBUTE_NAME);\r\n+        }\r\n+\r\n+        if (interfaceClass == null) {\r\n+            // last, get the interface class from first one\r\n+            interfaceClass = ((TypeElement) annotatedClass).getInterfaces().get(0);\r\n+        }\r\n+\r\n+        return valueOf(interfaceClass);\r\n+    }\r\n+\r\n+    static String getGroup(AnnotationMirror serviceAnnotation) {\r\n+        return getAttribute(serviceAnnotation, GROUP_ATTRIBUTE_NAME);\r\n+    }\r\n+\r\n+    static String getVersion(AnnotationMirror serviceAnnotation) {\r\n+        return getAttribute(serviceAnnotation, VERSION_ATTRIBUTE_NAME);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,400 +1,400 @@\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.metadata.annotation.processing.util;\n-\n-import org.apache.dubbo.common.utils.ClassUtils;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.element.TypeParameterElement;\n-import javax.lang.model.type.DeclaredType;\n-import javax.lang.model.type.TypeKind;\n-import javax.lang.model.type.TypeMirror;\n-import javax.lang.model.util.Elements;\n-import javax.tools.FileObject;\n-import javax.tools.StandardLocation;\n-import java.io.IOException;\n-import java.lang.reflect.Type;\n-import java.net.URL;\n-import java.util.ArrayList;\n-import java.util.LinkedHashSet;\n-import java.util.List;\n-import java.util.Objects;\n-import java.util.Set;\n-import java.util.function.Predicate;\n-\n-import static java.lang.String.valueOf;\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.emptyList;\n-import static java.util.Collections.emptySet;\n-import static java.util.stream.Collectors.toSet;\n-import static java.util.stream.Stream.of;\n-import static java.util.stream.StreamSupport.stream;\n-import static javax.lang.model.element.ElementKind.ANNOTATION_TYPE;\n-import static javax.lang.model.element.ElementKind.CLASS;\n-import static javax.lang.model.element.ElementKind.ENUM;\n-import static javax.lang.model.element.ElementKind.INTERFACE;\n-import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.common.utils.MethodUtils.invokeMethod;\n-\n-/**\n- * The utilities class for type in the package \"javax.lang.model.*\"\n- *\n- * @since 2.7.6\n- */\n-public interface TypeUtils {\n-\n-    List<String> SIMPLE_TYPES = asList(\n-            ClassUtils.SIMPLE_TYPES\n-                    .stream()\n-                    .map(Class::getName)\n-                    .toArray(String[]::new)\n-    );\n-\n-    static boolean isSimpleType(Element element) {\n-        return element != null && isSimpleType(element.asType());\n-    }\n-\n-    static boolean isSimpleType(TypeMirror type) {\n-        return type != null && SIMPLE_TYPES.contains(type.toString());\n-    }\n-\n-    static boolean isSameType(TypeMirror type, CharSequence typeName) {\n-        if (type == null || typeName == null) {\n-            return false;\n-        }\n-        return Objects.equals(valueOf(type), valueOf(typeName));\n-    }\n-\n-    static boolean isSameType(TypeMirror typeMirror, Type type) {\n-        return type != null && isSameType(typeMirror, type.getTypeName());\n-    }\n-\n-    static boolean isArrayType(TypeMirror type) {\n-        return type != null && TypeKind.ARRAY.equals(type.getKind());\n-    }\n-\n-    static boolean isArrayType(Element element) {\n-        return element != null && isArrayType(element.asType());\n-    }\n-\n-    static boolean isEnumType(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        return declaredType != null && ENUM.equals(declaredType.asElement().getKind());\n-    }\n-\n-    static boolean isEnumType(Element element) {\n-        return element != null && isEnumType(element.asType());\n-    }\n-\n-    static boolean isClassType(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        return declaredType != null && isClassType(declaredType.asElement());\n-    }\n-\n-    static boolean isClassType(Element element) {\n-        return element != null && CLASS.equals(element.getKind());\n-    }\n-\n-    static boolean isPrimitiveType(TypeMirror type) {\n-        return type != null && type.getKind().isPrimitive();\n-    }\n-\n-    static boolean isPrimitiveType(Element element) {\n-        return element != null && isPrimitiveType(element.asType());\n-    }\n-\n-    static boolean isInterfaceType(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        return declaredType != null && isInterfaceType(declaredType.asElement());\n-    }\n-\n-    static boolean isInterfaceType(Element element) {\n-        return element != null && INTERFACE.equals(element.getKind());\n-    }\n-\n-    static boolean isAnnotationType(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        return declaredType != null && isAnnotationType(declaredType.asElement());\n-    }\n-\n-    static boolean isAnnotationType(Element element) {\n-        return element != null && ANNOTATION_TYPE.equals(element.getKind());\n-    }\n-\n-    static Set<TypeElement> getHierarchicalTypes(TypeElement type) {\n-        return getHierarchicalTypes(type, true, true, true);\n-    }\n-\n-    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type) {\n-        return getHierarchicalTypes(type, EMPTY_ARRAY);\n-    }\n-\n-    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, Predicate<DeclaredType>... typeFilters) {\n-        return filterAll(ofDeclaredTypes(getHierarchicalTypes(ofTypeElement(type))), typeFilters);\n-    }\n-\n-    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, Type... excludedTypes) {\n-        return getHierarchicalTypes(type, of(excludedTypes).map(Type::getTypeName).toArray(String[]::new));\n-    }\n-\n-    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, CharSequence... excludedTypeNames) {\n-        Set<String> typeNames = of(excludedTypeNames).map(CharSequence::toString).collect(toSet());\n-        return getHierarchicalTypes(type, t -> !typeNames.contains(t.toString()));\n-    }\n-\n-    static Set<TypeElement> getHierarchicalTypes(TypeElement type,\n-                                                 boolean includeSelf,\n-                                                 boolean includeSuperTypes,\n-                                                 boolean includeSuperInterfaces,\n-                                                 Predicate<TypeElement>... typeFilters) {\n-\n-        if (type == null) {\n-            return emptySet();\n-        }\n-\n-        Set<TypeElement> hierarchicalTypes = new LinkedHashSet<>();\n-\n-        if (includeSelf) {\n-            hierarchicalTypes.add(type);\n-        }\n-\n-        if (includeSuperTypes) {\n-            hierarchicalTypes.addAll(getAllSuperTypes(type));\n-        }\n-\n-        if (includeSuperInterfaces) {\n-            hierarchicalTypes.addAll(getAllInterfaces(type));\n-        }\n-\n-        return filterAll(hierarchicalTypes, typeFilters);\n-    }\n-\n-    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type,\n-                                                  boolean includeSelf,\n-                                                  boolean includeSuperTypes,\n-                                                  boolean includeSuperInterfaces) {\n-        return ofDeclaredTypes(getHierarchicalTypes(ofTypeElement(type),\n-                includeSelf,\n-                includeSuperTypes,\n-                includeSuperInterfaces));\n-    }\n-\n-    static List<TypeMirror> getInterfaces(TypeElement type, Predicate<TypeMirror>... interfaceFilters) {\n-        return type == null ? emptyList() : filterAll((List<TypeMirror>) ofTypeElement(type).getInterfaces(), interfaceFilters);\n-    }\n-\n-    static List<TypeMirror> getInterfaces(TypeMirror type, Predicate<TypeMirror>... interfaceFilters) {\n-        return getInterfaces(ofTypeElement(type), interfaceFilters);\n-    }\n-\n-    static Set<TypeElement> getAllInterfaces(TypeElement type, Predicate<TypeElement>... interfaceFilters) {\n-        return type == null ? emptySet() : filterAll(ofTypeElements(getAllInterfaces(type.asType())), interfaceFilters);\n-    }\n-\n-    static Set<? extends TypeMirror> getAllInterfaces(TypeMirror type, Predicate<TypeMirror>... interfaceFilters) {\n-        if (type == null) {\n-            return emptySet();\n-        }\n-        Set<TypeMirror> allInterfaces = new LinkedHashSet<>();\n-        getInterfaces(type).forEach(i -> {\n-            // Add current type's interfaces\n-            allInterfaces.add(i);\n-            // Add\n-            allInterfaces.addAll(getAllInterfaces(i));\n-        });\n-        // Add all super types' interfaces\n-        getAllSuperTypes(type).forEach(superType -> allInterfaces.addAll(getAllInterfaces(superType)));\n-        return filterAll(allInterfaces, interfaceFilters);\n-    }\n-\n-    static TypeMirror findInterface(TypeMirror type, CharSequence interfaceClassName) {\n-        return filterFirst(getAllInterfaces(type), t -> isSameType(t, interfaceClassName));\n-    }\n-\n-    static TypeElement getType(ProcessingEnvironment processingEnv, Type type) {\n-        return type == null ? null : getType(processingEnv, type.getTypeName());\n-    }\n-\n-    static TypeElement getType(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        return type == null ? null : getType(processingEnv, type.toString());\n-    }\n-\n-    static TypeElement getType(ProcessingEnvironment processingEnv, CharSequence typeName) {\n-        if (processingEnv == null || typeName == null) {\n-            return null;\n-        }\n-        Elements elements = processingEnv.getElementUtils();\n-        return elements.getTypeElement(typeName);\n-    }\n-\n-    static TypeElement getSuperType(TypeElement type) {\n-        return type == null ? null : ofTypeElement(type.getSuperclass());\n-    }\n-\n-    static DeclaredType getSuperType(TypeMirror type) {\n-        TypeElement superType = getSuperType(ofTypeElement(type));\n-        return superType == null ? null : ofDeclaredType(superType.asType());\n-    }\n-\n-    static Set<TypeElement> getAllSuperTypes(TypeElement type) {\n-        return getAllSuperTypes(type, EMPTY_ARRAY);\n-    }\n-\n-    static Set<TypeElement> getAllSuperTypes(TypeElement type, Predicate<TypeElement>... typeFilters) {\n-        if (type == null) {\n-            return emptySet();\n-        }\n-\n-        Set<TypeElement> allSuperTypes = new LinkedHashSet<>();\n-        TypeElement superType = getSuperType(type);\n-        if (superType != null) {\n-            // add super type\n-            allSuperTypes.add(superType);\n-            // add ancestors' types\n-            allSuperTypes.addAll(getAllSuperTypes(superType));\n-        }\n-        return filterAll(allSuperTypes, typeFilters);\n-    }\n-\n-    static Set<DeclaredType> getAllSuperTypes(TypeMirror type) {\n-        return getAllSuperTypes(type, EMPTY_ARRAY);\n-    }\n-\n-    static Set<DeclaredType> getAllSuperTypes(TypeMirror type, Predicate<DeclaredType>... typeFilters) {\n-        return filterAll(ofDeclaredTypes(getAllSuperTypes(ofTypeElement(type))), typeFilters);\n-    }\n-\n-    static boolean isDeclaredType(Element element) {\n-        return element != null && isDeclaredType(element.asType());\n-    }\n-\n-    static boolean isDeclaredType(TypeMirror type) {\n-        return type instanceof DeclaredType;\n-    }\n-\n-    static DeclaredType ofDeclaredType(Element element) {\n-        return element == null ? null : ofDeclaredType(element.asType());\n-    }\n-\n-    static DeclaredType ofDeclaredType(TypeMirror type) {\n-        return isDeclaredType(type) ? (DeclaredType) type : null;\n-    }\n-\n-    static boolean isTypeElement(Element element) {\n-        return element instanceof TypeElement;\n-    }\n-\n-    static boolean isTypeElement(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        return declaredType != null && isTypeElement(declaredType.asElement());\n-    }\n-\n-    static TypeElement ofTypeElement(Element element) {\n-        return isTypeElement(element) ? (TypeElement) element : null;\n-    }\n-\n-    static TypeElement ofTypeElement(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        if (declaredType != null) {\n-            return ofTypeElement(declaredType.asElement());\n-        }\n-        return null;\n-    }\n-\n-    static Set<DeclaredType> ofDeclaredTypes(Iterable<? extends Element> elements) {\n-        return elements == null ?\n-                emptySet() :\n-                stream(elements.spliterator(), false)\n-                        .map(TypeUtils::ofTypeElement)\n-                        .filter(Objects::nonNull)\n-                        .map(Element::asType)\n-                        .map(TypeUtils::ofDeclaredType)\n-                        .filter(Objects::nonNull)\n-                        .collect(LinkedHashSet::new, Set::add, Set::addAll);\n-    }\n-\n-    static Set<TypeElement> ofTypeElements(Iterable<? extends TypeMirror> types) {\n-        return types == null ?\n-                emptySet() :\n-                stream(types.spliterator(), false)\n-                        .map(TypeUtils::ofTypeElement)\n-                        .filter(Objects::nonNull)\n-                        .collect(LinkedHashSet::new, Set::add, Set::addAll);\n-    }\n-\n-    static List<DeclaredType> listDeclaredTypes(Iterable<? extends Element> elements) {\n-        return new ArrayList<>(ofDeclaredTypes(elements));\n-    }\n-\n-    static List<TypeElement> listTypeElements(Iterable<? extends TypeMirror> types) {\n-        return new ArrayList<>(ofTypeElements(types));\n-    }\n-\n-    static URL getResource(ProcessingEnvironment processingEnv, Element type) {\n-        return getResource(processingEnv, ofDeclaredType(type));\n-    }\n-\n-    static URL getResource(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        return type == null ? null : getResource(processingEnv, type.toString());\n-    }\n-\n-    static URL getResource(ProcessingEnvironment processingEnv, CharSequence type) {\n-        String relativeName = getResourceName(type);\n-        URL resource = null;\n-        try {\n-            if (relativeName != null) {\n-                FileObject fileObject = processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, \"\", relativeName);\n-                resource = fileObject.toUri().toURL();\n-                // try to open it\n-                resource.getContent();\n-            }\n-        } catch (IOException e) {\n-            throw new RuntimeException(e);\n-        }\n-\n-        return resource;\n-    }\n-\n-    static String getResourceName(CharSequence type) {\n-        return type == null ? null : type.toString().replace('.', '/').concat(\".class\");\n-    }\n-\n-    static String toString(TypeMirror type) {\n-        TypeElement element = ofTypeElement(type);\n-        if (element != null) {\n-            List<? extends TypeParameterElement> typeParameterElements = element.getTypeParameters();\n-            if (!typeParameterElements.isEmpty()) {\n-                List<TypeMirror> typeMirrors = invokeMethod(type, \"getTypeArguments\");\n-                StringBuilder typeBuilder = new StringBuilder(element.toString());\n-                typeBuilder.append(\"<\");\n-                for (int i = 0; i < typeMirrors.size(); i++) {\n-                    if (i > 0) {\n-                        typeBuilder.append(\", \");\n-                    }\n-                    typeBuilder.append(typeMirrors.get(i).toString());\n-                }\n-                typeBuilder.append(\">\");\n-                return typeBuilder.toString();\n-            }\n-        }\n-        return type.toString();\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.metadata.annotation.processing.util;\r\n+\r\n+import org.apache.dubbo.common.utils.ClassUtils;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.element.TypeParameterElement;\r\n+import javax.lang.model.type.DeclaredType;\r\n+import javax.lang.model.type.TypeKind;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import javax.lang.model.util.Elements;\r\n+import javax.tools.FileObject;\r\n+import javax.tools.StandardLocation;\r\n+import java.io.IOException;\r\n+import java.lang.reflect.Type;\r\n+import java.net.URL;\r\n+import java.util.ArrayList;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+import java.util.function.Predicate;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.emptyList;\r\n+import static java.util.Collections.emptySet;\r\n+import static java.util.stream.Collectors.toSet;\r\n+import static java.util.stream.Stream.of;\r\n+import static java.util.stream.StreamSupport.stream;\r\n+import static javax.lang.model.element.ElementKind.ANNOTATION_TYPE;\r\n+import static javax.lang.model.element.ElementKind.CLASS;\r\n+import static javax.lang.model.element.ElementKind.ENUM;\r\n+import static javax.lang.model.element.ElementKind.INTERFACE;\r\n+import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.invokeMethod;\r\n+\r\n+/**\r\n+ * The utilities class for type in the package \"javax.lang.model.*\"\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface TypeUtils {\r\n+\r\n+    List<String> SIMPLE_TYPES = asList(\r\n+            ClassUtils.SIMPLE_TYPES\r\n+                    .stream()\r\n+                    .map(Class::getName)\r\n+                    .toArray(String[]::new)\r\n+    );\r\n+\r\n+    static boolean isSimpleType(Element element) {\r\n+        return element != null && isSimpleType(element.asType());\r\n+    }\r\n+\r\n+    static boolean isSimpleType(TypeMirror type) {\r\n+        return type != null && SIMPLE_TYPES.contains(type.toString());\r\n+    }\r\n+\r\n+    static boolean isSameType(TypeMirror type, CharSequence typeName) {\r\n+        if (type == null || typeName == null) {\r\n+            return false;\r\n+        }\r\n+        return Objects.equals(valueOf(type), valueOf(typeName));\r\n+    }\r\n+\r\n+    static boolean isSameType(TypeMirror typeMirror, Type type) {\r\n+        return type != null && isSameType(typeMirror, type.getTypeName());\r\n+    }\r\n+\r\n+    static boolean isArrayType(TypeMirror type) {\r\n+        return type != null && TypeKind.ARRAY.equals(type.getKind());\r\n+    }\r\n+\r\n+    static boolean isArrayType(Element element) {\r\n+        return element != null && isArrayType(element.asType());\r\n+    }\r\n+\r\n+    static boolean isEnumType(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        return declaredType != null && ENUM.equals(declaredType.asElement().getKind());\r\n+    }\r\n+\r\n+    static boolean isEnumType(Element element) {\r\n+        return element != null && isEnumType(element.asType());\r\n+    }\r\n+\r\n+    static boolean isClassType(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        return declaredType != null && isClassType(declaredType.asElement());\r\n+    }\r\n+\r\n+    static boolean isClassType(Element element) {\r\n+        return element != null && CLASS.equals(element.getKind());\r\n+    }\r\n+\r\n+    static boolean isPrimitiveType(TypeMirror type) {\r\n+        return type != null && type.getKind().isPrimitive();\r\n+    }\r\n+\r\n+    static boolean isPrimitiveType(Element element) {\r\n+        return element != null && isPrimitiveType(element.asType());\r\n+    }\r\n+\r\n+    static boolean isInterfaceType(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        return declaredType != null && isInterfaceType(declaredType.asElement());\r\n+    }\r\n+\r\n+    static boolean isInterfaceType(Element element) {\r\n+        return element != null && INTERFACE.equals(element.getKind());\r\n+    }\r\n+\r\n+    static boolean isAnnotationType(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        return declaredType != null && isAnnotationType(declaredType.asElement());\r\n+    }\r\n+\r\n+    static boolean isAnnotationType(Element element) {\r\n+        return element != null && ANNOTATION_TYPE.equals(element.getKind());\r\n+    }\r\n+\r\n+    static Set<TypeElement> getHierarchicalTypes(TypeElement type) {\r\n+        return getHierarchicalTypes(type, true, true, true);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type) {\r\n+        return getHierarchicalTypes(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, Predicate<DeclaredType>... typeFilters) {\r\n+        return filterAll(ofDeclaredTypes(getHierarchicalTypes(ofTypeElement(type))), typeFilters);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, Type... excludedTypes) {\r\n+        return getHierarchicalTypes(type, of(excludedTypes).map(Type::getTypeName).toArray(String[]::new));\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, CharSequence... excludedTypeNames) {\r\n+        Set<String> typeNames = of(excludedTypeNames).map(CharSequence::toString).collect(toSet());\r\n+        return getHierarchicalTypes(type, t -> !typeNames.contains(t.toString()));\r\n+    }\r\n+\r\n+    static Set<TypeElement> getHierarchicalTypes(TypeElement type,\r\n+                                                 boolean includeSelf,\r\n+                                                 boolean includeSuperTypes,\r\n+                                                 boolean includeSuperInterfaces,\r\n+                                                 Predicate<TypeElement>... typeFilters) {\r\n+\r\n+        if (type == null) {\r\n+            return emptySet();\r\n+        }\r\n+\r\n+        Set<TypeElement> hierarchicalTypes = new LinkedHashSet<>();\r\n+\r\n+        if (includeSelf) {\r\n+            hierarchicalTypes.add(type);\r\n+        }\r\n+\r\n+        if (includeSuperTypes) {\r\n+            hierarchicalTypes.addAll(getAllSuperTypes(type));\r\n+        }\r\n+\r\n+        if (includeSuperInterfaces) {\r\n+            hierarchicalTypes.addAll(getAllInterfaces(type));\r\n+        }\r\n+\r\n+        return filterAll(hierarchicalTypes, typeFilters);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type,\r\n+                                                  boolean includeSelf,\r\n+                                                  boolean includeSuperTypes,\r\n+                                                  boolean includeSuperInterfaces) {\r\n+        return ofDeclaredTypes(getHierarchicalTypes(ofTypeElement(type),\r\n+                includeSelf,\r\n+                includeSuperTypes,\r\n+                includeSuperInterfaces));\r\n+    }\r\n+\r\n+    static List<TypeMirror> getInterfaces(TypeElement type, Predicate<TypeMirror>... interfaceFilters) {\r\n+        return type == null ? emptyList() : filterAll((List<TypeMirror>) ofTypeElement(type).getInterfaces(), interfaceFilters);\r\n+    }\r\n+\r\n+    static List<TypeMirror> getInterfaces(TypeMirror type, Predicate<TypeMirror>... interfaceFilters) {\r\n+        return getInterfaces(ofTypeElement(type), interfaceFilters);\r\n+    }\r\n+\r\n+    static Set<TypeElement> getAllInterfaces(TypeElement type, Predicate<TypeElement>... interfaceFilters) {\r\n+        return type == null ? emptySet() : filterAll(ofTypeElements(getAllInterfaces(type.asType())), interfaceFilters);\r\n+    }\r\n+\r\n+    static Set<? extends TypeMirror> getAllInterfaces(TypeMirror type, Predicate<TypeMirror>... interfaceFilters) {\r\n+        if (type == null) {\r\n+            return emptySet();\r\n+        }\r\n+        Set<TypeMirror> allInterfaces = new LinkedHashSet<>();\r\n+        getInterfaces(type).forEach(i -> {\r\n+            // Add current type's interfaces\r\n+            allInterfaces.add(i);\r\n+            // Add\r\n+            allInterfaces.addAll(getAllInterfaces(i));\r\n+        });\r\n+        // Add all super types' interfaces\r\n+        getAllSuperTypes(type).forEach(superType -> allInterfaces.addAll(getAllInterfaces(superType)));\r\n+        return filterAll(allInterfaces, interfaceFilters);\r\n+    }\r\n+\r\n+    static TypeMirror findInterface(TypeMirror type, CharSequence interfaceClassName) {\r\n+        return filterFirst(getAllInterfaces(type), t -> isSameType(t, interfaceClassName));\r\n+    }\r\n+\r\n+    static TypeElement getType(ProcessingEnvironment processingEnv, Type type) {\r\n+        return type == null ? null : getType(processingEnv, type.getTypeName());\r\n+    }\r\n+\r\n+    static TypeElement getType(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        return type == null ? null : getType(processingEnv, type.toString());\r\n+    }\r\n+\r\n+    static TypeElement getType(ProcessingEnvironment processingEnv, CharSequence typeName) {\r\n+        if (processingEnv == null || typeName == null) {\r\n+            return null;\r\n+        }\r\n+        Elements elements = processingEnv.getElementUtils();\r\n+        return elements.getTypeElement(typeName);\r\n+    }\r\n+\r\n+    static TypeElement getSuperType(TypeElement type) {\r\n+        return type == null ? null : ofTypeElement(type.getSuperclass());\r\n+    }\r\n+\r\n+    static DeclaredType getSuperType(TypeMirror type) {\r\n+        TypeElement superType = getSuperType(ofTypeElement(type));\r\n+        return superType == null ? null : ofDeclaredType(superType.asType());\r\n+    }\r\n+\r\n+    static Set<TypeElement> getAllSuperTypes(TypeElement type) {\r\n+        return getAllSuperTypes(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static Set<TypeElement> getAllSuperTypes(TypeElement type, Predicate<TypeElement>... typeFilters) {\r\n+        if (type == null) {\r\n+            return emptySet();\r\n+        }\r\n+\r\n+        Set<TypeElement> allSuperTypes = new LinkedHashSet<>();\r\n+        TypeElement superType = getSuperType(type);\r\n+        if (superType != null) {\r\n+            // add super type\r\n+            allSuperTypes.add(superType);\r\n+            // add ancestors' types\r\n+            allSuperTypes.addAll(getAllSuperTypes(superType));\r\n+        }\r\n+        return filterAll(allSuperTypes, typeFilters);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getAllSuperTypes(TypeMirror type) {\r\n+        return getAllSuperTypes(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getAllSuperTypes(TypeMirror type, Predicate<DeclaredType>... typeFilters) {\r\n+        return filterAll(ofDeclaredTypes(getAllSuperTypes(ofTypeElement(type))), typeFilters);\r\n+    }\r\n+\r\n+    static boolean isDeclaredType(Element element) {\r\n+        return element != null && isDeclaredType(element.asType());\r\n+    }\r\n+\r\n+    static boolean isDeclaredType(TypeMirror type) {\r\n+        return type instanceof DeclaredType;\r\n+    }\r\n+\r\n+    static DeclaredType ofDeclaredType(Element element) {\r\n+        return element == null ? null : ofDeclaredType(element.asType());\r\n+    }\r\n+\r\n+    static DeclaredType ofDeclaredType(TypeMirror type) {\r\n+        return isDeclaredType(type) ? (DeclaredType) type : null;\r\n+    }\r\n+\r\n+    static boolean isTypeElement(Element element) {\r\n+        return element instanceof TypeElement;\r\n+    }\r\n+\r\n+    static boolean isTypeElement(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        return declaredType != null && isTypeElement(declaredType.asElement());\r\n+    }\r\n+\r\n+    static TypeElement ofTypeElement(Element element) {\r\n+        return isTypeElement(element) ? (TypeElement) element : null;\r\n+    }\r\n+\r\n+    static TypeElement ofTypeElement(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        if (declaredType != null) {\r\n+            return ofTypeElement(declaredType.asElement());\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    static Set<DeclaredType> ofDeclaredTypes(Iterable<? extends Element> elements) {\r\n+        return elements == null ?\r\n+                emptySet() :\r\n+                stream(elements.spliterator(), false)\r\n+                        .map(TypeUtils::ofTypeElement)\r\n+                        .filter(Objects::nonNull)\r\n+                        .map(Element::asType)\r\n+                        .map(TypeUtils::ofDeclaredType)\r\n+                        .filter(Objects::nonNull)\r\n+                        .collect(LinkedHashSet::new, Set::add, Set::addAll);\r\n+    }\r\n+\r\n+    static Set<TypeElement> ofTypeElements(Iterable<? extends TypeMirror> types) {\r\n+        return types == null ?\r\n+                emptySet() :\r\n+                stream(types.spliterator(), false)\r\n+                        .map(TypeUtils::ofTypeElement)\r\n+                        .filter(Objects::nonNull)\r\n+                        .collect(LinkedHashSet::new, Set::add, Set::addAll);\r\n+    }\r\n+\r\n+    static List<DeclaredType> listDeclaredTypes(Iterable<? extends Element> elements) {\r\n+        return new ArrayList<>(ofDeclaredTypes(elements));\r\n+    }\r\n+\r\n+    static List<TypeElement> listTypeElements(Iterable<? extends TypeMirror> types) {\r\n+        return new ArrayList<>(ofTypeElements(types));\r\n+    }\r\n+\r\n+    static URL getResource(ProcessingEnvironment processingEnv, Element type) {\r\n+        return getResource(processingEnv, ofDeclaredType(type));\r\n+    }\r\n+\r\n+    static URL getResource(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        return type == null ? null : getResource(processingEnv, type.toString());\r\n+    }\r\n+\r\n+    static URL getResource(ProcessingEnvironment processingEnv, CharSequence type) {\r\n+        String relativeName = getResourceName(type);\r\n+        URL resource = null;\r\n+        try {\r\n+            if (relativeName != null) {\r\n+                FileObject fileObject = processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, \"\", relativeName);\r\n+                resource = fileObject.toUri().toURL();\r\n+                // try to open it\r\n+                resource.getContent();\r\n+            }\r\n+        } catch (IOException e) {\r\n+            throw new RuntimeException(e);\r\n+        }\r\n+\r\n+        return resource;\r\n+    }\r\n+\r\n+    static String getResourceName(CharSequence type) {\r\n+        return type == null ? null : type.toString().replace('.', '/').concat(\".class\");\r\n+    }\r\n+\r\n+    static String toString(TypeMirror type) {\r\n+        TypeElement element = ofTypeElement(type);\r\n+        if (element != null) {\r\n+            List<? extends TypeParameterElement> typeParameterElements = element.getTypeParameters();\r\n+            if (!typeParameterElements.isEmpty()) {\r\n+                List<TypeMirror> typeMirrors = invokeMethod(type, \"getTypeArguments\");\r\n+                StringBuilder typeBuilder = new StringBuilder(element.toString());\r\n+                typeBuilder.append(\"<\");\r\n+                for (int i = 0; i < typeMirrors.size(); i++) {\r\n+                    if (i > 0) {\r\n+                        typeBuilder.append(\", \");\r\n+                    }\r\n+                    typeBuilder.append(typeMirrors.get(i).toString());\r\n+                }\r\n+                typeBuilder.append(\">\");\r\n+                return typeBuilder.toString();\r\n+            }\r\n+        }\r\n+        return type.toString();\r\n+    }\r\n }\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.builder.TypeDefinitionBuilder", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.builder.TypeDefinitionBuilder", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,7 +1,7 @@\n-array-type = org.apache.dubbo.metadata.annotation.processing.builder.ArrayTypeDefinitionBuilder\n-collection-type = org.apache.dubbo.metadata.annotation.processing.builder.CollectionTypeDefinitionBuilder\n-enum-type = org.apache.dubbo.metadata.annotation.processing.builder.EnumTypeDefinitionBuilder\n-general-type = org.apache.dubbo.metadata.annotation.processing.builder.GeneralTypeDefinitionBuilder\n-map-type = org.apache.dubbo.metadata.annotation.processing.builder.MapTypeDefinitionBuilder\n-primitive-type = org.apache.dubbo.metadata.annotation.processing.builder.PrimitiveTypeDefinitionBuilder\n+array-type = org.apache.dubbo.metadata.annotation.processing.builder.ArrayTypeDefinitionBuilder\r\n+collection-type = org.apache.dubbo.metadata.annotation.processing.builder.CollectionTypeDefinitionBuilder\r\n+enum-type = org.apache.dubbo.metadata.annotation.processing.builder.EnumTypeDefinitionBuilder\r\n+general-type = org.apache.dubbo.metadata.annotation.processing.builder.GeneralTypeDefinitionBuilder\r\n+map-type = org.apache.dubbo.metadata.annotation.processing.builder.MapTypeDefinitionBuilder\r\n+primitive-type = org.apache.dubbo.metadata.annotation.processing.builder.PrimitiveTypeDefinitionBuilder\r\n simple-type = org.apache.dubbo.metadata.annotation.processing.builder.SimpleTypeDefinitionBuilder\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,10 +1,10 @@\n-# JAX-RS's implementations\n-jax-rs.query-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.QueryParamParameterProcessor\n-jax-rs.form-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.FormParamParameterProcessor\n-jax-rs.matrix-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.MatrixParamParameterProcessor\n-jax-rs.header-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.HeaderParamParameterProcessor\n-jax-rs.default-value-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.DefaultValueParameterProcessor\n-\n-# Spring Web MVC's implementations\n-spring-webmvc.request-param = org.apache.dubbo.metadata.annotation.processing.rest.springmvc.RequestParamParameterProcessor\n+# JAX-RS's implementations\r\n+jax-rs.query-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.QueryParamParameterProcessor\r\n+jax-rs.form-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.FormParamParameterProcessor\r\n+jax-rs.matrix-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.MatrixParamParameterProcessor\r\n+jax-rs.header-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.HeaderParamParameterProcessor\r\n+jax-rs.default-value-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.DefaultValueParameterProcessor\r\n+\r\n+# Spring Web MVC's implementations\r\n+spring-webmvc.request-param = org.apache.dubbo.metadata.annotation.processing.rest.springmvc.RequestParamParameterProcessor\r\n spring-webmvc.request-header = org.apache.dubbo.metadata.annotation.processing.rest.springmvc.RequestHeaderParameterProcessor\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,3 +1,3 @@\n-default = org.apache.dubbo.metadata.annotation.processing.rest.DefaultServiceRestMetadataResolver\n-jax-rs = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.JAXRSServiceRestMetadataResolver\n+default = org.apache.dubbo.metadata.annotation.processing.rest.DefaultServiceRestMetadataResolver\r\n+jax-rs = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.JAXRSServiceRestMetadataResolver\r\n spring-webmvc = org.apache.dubbo.metadata.annotation.processing.rest.springmvc.SpringMvcServiceRestMetadataResolver\n"}, {"source1": "META-INF/services/javax.annotation.processing.Processor", "source2": "META-INF/services/javax.annotation.processing.Processor", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,2 +1,2 @@\n-org.apache.dubbo.metadata.annotation.processing.ServiceDefinitionMetadataAnnotationProcessor\n-org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataAnnotationProcessor\n+org.apache.dubbo.metadata.annotation.processing.ServiceDefinitionMetadataAnnotationProcessor\r\n+org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataAnnotationProcessor\r\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml", "unified_diff": null, "details": [{"source1": "META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml", "comments": ["Ordering differences only"], "unified_diff": "@@ -37,123 +37,123 @@\n   <dependencies>\n     <dependency>\n       <groupId>org.apache.dubbo</groupId>\n       <artifactId>dubbo-metadata-api</artifactId>\n       <version>${project.parent.version}</version>\n       <exclusions>\n         <exclusion>\n-          <artifactId>dubbo-rpc-api</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-rpc-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-cluster</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-cluster</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>gson</artifactId>\n           <groupId>com.google.code.gson</groupId>\n+          <artifactId>gson</artifactId>\n         </exclusion>\n       </exclusions>\n     </dependency>\n     <dependency>\n       <groupId>org.apache.dubbo</groupId>\n       <artifactId>dubbo-common</artifactId>\n       <version>${project.parent.version}</version>\n       <exclusions>\n         <exclusion>\n-          <artifactId>javax.annotation-api</artifactId>\n           <groupId>javax.annotation</groupId>\n+          <artifactId>javax.annotation-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>slf4j-api</artifactId>\n           <groupId>org.slf4j</groupId>\n+          <artifactId>slf4j-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>commons-logging</artifactId>\n           <groupId>commons-logging</groupId>\n+          <artifactId>commons-logging</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>log4j</artifactId>\n           <groupId>log4j</groupId>\n+          <artifactId>log4j</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>log4j-api</artifactId>\n           <groupId>org.apache.logging.log4j</groupId>\n+          <artifactId>log4j-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>log4j-core</artifactId>\n           <groupId>org.apache.logging.log4j</groupId>\n+          <artifactId>log4j-core</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>javassist</artifactId>\n           <groupId>org.javassist</groupId>\n+          <artifactId>javassist</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>hessian-lite</artifactId>\n           <groupId>com.alibaba</groupId>\n+          <artifactId>hessian-lite</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>fastjson</artifactId>\n           <groupId>com.alibaba</groupId>\n+          <artifactId>fastjson</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>kryo</artifactId>\n           <groupId>com.esotericsoftware</groupId>\n+          <artifactId>kryo</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>kryo-serializers</artifactId>\n           <groupId>de.javakaffee</groupId>\n+          <artifactId>kryo-serializers</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>fst</artifactId>\n           <groupId>de.ruedigermoeller</groupId>\n+          <artifactId>fst</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>commons-io</artifactId>\n           <groupId>commons-io</groupId>\n+          <artifactId>commons-io</artifactId>\n         </exclusion>\n       </exclusions>\n     </dependency>\n     <dependency>\n       <groupId>com.google.code.gson</groupId>\n       <artifactId>gson</artifactId>\n     </dependency>\n     <dependency>\n       <groupId>org.apache.dubbo</groupId>\n       <artifactId>dubbo-config-api</artifactId>\n       <version>${project.parent.version}</version>\n       <scope>test</scope>\n       <exclusions>\n         <exclusion>\n-          <artifactId>dubbo-registry-api</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-registry-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-metadata-api</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-metadata-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-monitor-api</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-monitor-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-remoting-api</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-remoting-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-rpc-injvm</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-rpc-injvm</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-filter-validation</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-filter-validation</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-filter-cache</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-filter-cache</artifactId>\n         </exclusion>\n       </exclusions>\n     </dependency>\n     <dependency>\n       <groupId>javax.ws.rs</groupId>\n       <artifactId>javax.ws.rs-api</artifactId>\n       <scope>test</scope>\n"}]}]}
